CustomErrorPagesMiddleware
public class CustomErrorPagesMiddleware ???{ ???????private readonly RequestDelegate _next; ???????private readonly Microsoft.Extensions.Logging.ILogger _logger; ???????private readonly IHostingEnvironment _env; ???????public CustomErrorPagesMiddleware( ???????????RequestDelegate next, ???????????ILoggerFactory loggerFactory, ???????????IHostingEnvironment env) ???????{ ???????????_next = next; ???????????_logger = loggerFactory.CreateLogger<CustomErrorPagesMiddleware>(); ???????????_env = env; ???????} ???????public async Task Invoke(HttpContext context) ???????{ ???????????try ???????????{ ???????????????await _next(context); ???????????} ???????????catch (Exception ex) ???????????{ ???????????????_logger.LogError(0, ex, "An unhandled exception has occurred while executing the request"); ???????????????if (context.Response.HasStarted) ???????????????{ ???????????????????_logger.LogWarning("The response has already started, the error page middleware will not be executed."); ???????????????????throw; ???????????????} ???????????????try ???????????????{ ???????????????????context.Response.Clear(); ???????????????????context.Response.StatusCode = 500; ???????????????????return; ???????????????} ???????????????catch (Exception ex2) ???????????????{ ???????????????????_logger.LogError(0, ex2, "An exception was thrown attempting to display the error page."); ???????????????} ???????????????throw; ???????????} ???????????finally ???????????{ ???????????????var statusCode = context.Response.StatusCode; ???????????????if (statusCode == 404 || statusCode == 500|| statusCode == 403) ???????????????{ ?????????????????????????????????????await ErrorPage.ResponseAsync(context.Response, statusCode,_env); ???????????????} ???????????????????????????} ???????} ???}
ErrorPage
public static class ErrorPage ???{ ???????public static async Task ResponseAsync(HttpResponse response, int statusCode, IHostingEnvironment env) ???????{ ???????????if (statusCode == 404) ???????????{ ?????????????????????????????????await response.WriteAsync(Page404,Encoding.UTF8); ??????????????????????} ???????????else if (statusCode == 500) ???????????{ ???????????????await response.WriteAsync(Page500); ???????????}else if (statusCode == 403) ???????????{ ??????????? //没有权限服务器会返回403; ???????????????await response.WriteAsync(Page403); ???????????} ???????} ???????private static string Page404 => "404"; ???????private static string Page500 => "500"; ???????private static string Page403 => "403"; ???}
CustomErrorPagesExtensions
public static class CustomErrorPagesExtensions ???{ ???????public static IApplicationBuilder UseCustomErrorPages(this IApplicationBuilder app) ???????{ ???????????if (app == null) ???????????{ ???????????????throw new ArgumentNullException(nameof(app)); ???????????} ???????????return app.UseMiddleware<CustomErrorPagesMiddleware>(); ???????} ???}
Startup
app.UseCustomErrorPages();
学习Net Core 2.0 做博客 错误页中间件
原文地址:http://www.cnblogs.com/wyzy/p/7749908.html