学习Net Core 2.0 做博客 错误页中间件

2021-05-15 22:29

阅读:674

标签:star   and   war   request   ext   while   中间   div   std   

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();
            _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();
        }
    }

Startup

 app.UseCustomErrorPages();

 

学习Net Core 2.0 做博客 错误页中间件

标签:star   and   war   request   ext   while   中间   div   std   

原文地址:http://www.cnblogs.com/wyzy/p/7749908.html

上一篇:web网站的基本分类

下一篇:URL的应用


评论


亲,登录后才可以留言!