欢迎光临
个人技术文档整理

.net core 异常处理中间件

UseDeveloperExceptionPage

开发者异常页面组件:

  • 一般用于开发阶段,快速的排错。

  • 返回一个状态码 500 的错误响应

  • 会在页面显示很详细的敏感信息
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            
            if (env.IsDevelopment())
            {
                //开发环境执行 
                DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions
                {
                    SourceCodeLineCount = 15//默认6,显示异常源码的前后N行代码 
                };
                app.UseDeveloperExceptionPage(developerExceptionPageOptions); 

            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            } 
         }

 

这种虽然能在页面显示出具体的错误信息,但是这并不适合生产环境。在生产环境下我们更希望为用户呈现一个定制的错误页面。

ExceptionHandler

异常处理组件

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            // 方式一
            var options = new ExceptionHandlerOptions
            {
                ExceptionHandler = async context =>
                {
                    var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
                    var ex = exceptionHandlerPathFeature?.Error;
                    if (ex != null)
                    {
                        context.Response.ContentType = "text/plain;charset=utf-8";
                        await context.Response.WriteAsync("程序出错了:" + ex.ToString());
                        // await context.Response.WriteAsync("程序出错了");
                    }
                }
            };
            app.UseExceptionHandler(options);

            //方式二, 和方式一效果一样
            //app.UseExceptionHandler(applicationBuilder => applicationBuilder.Run(async context => { context.Response.ContentType = "text/plain;charset=utf-8"; await context.Response.WriteAsync("程序出错了"); }));

            //方式三, 跳转到错误页面
            //app.UseExceptionHandler("/Home/Error");
        }

 

UseStatusCodePages

通过Http状态码去判断是否为成功的返回并进行处理

  • 判断是否是400-600,也就是4xx 5xx相关的状态码
  • 不包含处理异常相关的逻辑
  • 可以用来处理 后缀页面不存在404的情况
            //使用方式
            //app.UseStatusCodePages();//Status Code: 404; Not Found
            //或
            //app.UseStatusCodePages("text/plain;charset=utf-8", "状态码:{0}");
            //或
            app.UseStatusCodePages(async context =>
            {
                context.HttpContext.Response.ContentType = "text/plain;charset=utf-8";
                await context.HttpContext.Response.WriteAsync($"状态码:{context.HttpContext.Response.StatusCode}");
            });

            //或
            //app.UseStatusCodePages(new StatusCodePagesOptions
            //{
            //    HandleAsync = async context => {
            //        context.HttpContext.Response.ContentType = "text/plain;charset=utf-8";
            //        await context.HttpContext.Response.WriteAsync($"状态码:{context.HttpContext.Response.StatusCode}");
            //    }
            //});
            //或
            //app.UseStatusCodePages(configure =>
            //{
            //    configure.Run(async context =>
            //    {
            //        await context.Response.WriteAsync($"状态码:{context.Response.StatusCode}");
            //    });
            //});

 

赞(2)