ASP.NET Core 统一异常处理和返回
2017-04-04 22:36
851 查看
业务场景:
业务需求要求,需要对 ASP.NET Core 异常进行统一处理和返回,比如出现 500 错误和业务服务错误进行不同的处理和返回。
具体实现:
业务需求要求,需要对 ASP.NET Core 异常进行统一处理和返回,比如出现 500 错误和业务服务错误进行不同的处理和返回。
具体实现:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Newtonsoft.Json; using System; using System.Net; using System.Threading.Tasks; public class ErrorHandlingMiddleware { private readonly RequestDelegate next; public ErrorHandlingMiddleware(RequestDelegate next) { this.next = next; } public async Task Invoke(HttpContext context) { try { await next(context); } catch (Exception ex) { var statusCode = context.Response.StatusCode; if (ex is ArgumentException) { statusCode = 200; } await HandleExceptionAsync(context, statusCode, ex.Message); } finally { var statusCode = context.Response.StatusCode; var msg = ""; if (statusCode == 401) { msg = "未授权"; } else if (statusCode == 404) { msg = "未找到服务"; } else if (statusCode == 502) { msg = "请求错误"; } else if (statusCode != 200) { msg = "未知错误"; } if (!string.IsNullOrWhiteSpace(msg)) { await HandleExceptionAsync(context, statusCode, msg); } } } private static Task HandleExceptionAsync(HttpContext context, int statusCode, string msg) { var data = new { code = statusCode.ToString(), is_success = false, msg = msg }; var result = JsonConvert.SerializeObject(new { data = data }); context.Response.ContentType = "application/json;charset=utf-8"; return context.Response.WriteAsync(result); } } public static class ErrorHandlingExtensions { public static IApplicationBuilder UseErrorHandling(this IApplicationBuilder builder) { return builder.UseMiddleware<ErrorHandlingMiddleware>(); } }
Startup添加对应配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseErrorHandling(); }
相关文章推荐
- asp.net core 教程(七)-异常处理、静态文件
- ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)
- 使用Spring.NET统一ASP.NET异常处理并记录日志
- ASP.NET MVC统一异常处理
- 【ASP.NET Core】处理异常
- ASP.NET Core WebApi 返回统一格式参数
- ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”
- 在ASP.NET项目中建立统一的异常处理机制
- ASP.NET Core Web API处理HttpResponseMessage类型返回值的问题
- 【ASP.NET Core】处理异常(上篇)
- ASP.NET Core 异常处理与日志记录
- ASP.NET Core如何添加统一模型验证处理机制详解
- 基于.Net Framework 4.0 Web API开发(3):ASP.NET Web APIs 异常的统一处理Attribute 和统一写Log 的Attribute的实现
- ASP.NET MVC 的统一异常处理有多难?(衍生的意图,出错后如何保持表单的状态?)
- asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
- 【ASP.NET Core】处理异常(下篇)
- [原创]在ASP.NET项目中建立统一的异常处理机制
- asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
- ASP.NET中的事务处理和异常处理