Net Core中使用中间件方式拦截异常
Net Core中使用中间件方式
首先,创建一个中间件ExceptionMiddleware
public class ExceptionMiddleware { private readonly RequestDelegate next; private IHostingEnvironment environment; public ExceptionMiddleware(RequestDelegate next,IHostingEnvironment environment) { this.next = next; this.environment = environment; } public async Task Invoke(HttpContext context) { try { await next.Invoke(context); var features = context.Features; } catch (Exception e) { await HandleException(context, e); } } private async Task HandleException(HttpContext context, Exception e) { context.Response.StatusCode = 500; context.Response.ContentType = "text/json;charset=utf-8;"; string error = ""; if (environment.IsDevelopment()) { var json = new { message = e.Message}; error = JsonConvert.SerializeObject(json); } else error = "抱歉,出错了"; await context.Response.WriteAsync(error); } }
创建 HandleException(HttpContext context, Exception e) 处理异常,判断是 Development 环境下,输出详细的错误信息,非 Development 环境仅提示调用者“抱歉,出错了”,同时使用 NLog 组件将日志写入硬盘;同样,在 Startup.cs 中将 ExceptionMiddleware 加入管道中
//ExceptionMiddleware 加入管道 app.UseMiddleware<ExceptionMiddleware>();
启动调试,结果如下
{"message":"Attempted to divide by zero."}
统一封装冷异常处理方式和消息格式,对前端也很友好。
版权声明:
本文为智客工坊「楠木大叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。