ASP.NET Core 全局异常处理 全球新要闻
(资料图片仅供参考)
IAsyncExceptionFilter
在 ASP.NET Core 中,可以使用异常过滤器(Exception Filter)来捕获和处理应用程序中的异常。IExceptionFilter 接口和 IAsyncExceptionFilter 接口都可以用来实现自定义的异常过滤器。不过我更建议您考虑它的异步版本:IAsyncExceptionFilter。
public class CustomExceptionFilter : IAsyncExceptionFilter{ private readonly ILogger _logger; public CustomExceptionFilter(ILogger logger) { _logger = logger; } public async Task OnExceptionAsync(ExceptionContext context) { _logger.LogError(context.Exception, "An error occurred."); if (!context.ExceptionHandled) { context.Result = new ViewResult { ViewName = "Error" }; context.ExceptionHandled = true; } await Task.CompletedTask; }}
在这个示例中,我们创建了一个名为 CustomExceptionFilter 的自定义异常过滤器,它实现了 IAsyncExceptionFilter 接口。在 OnExceptionAsync 方法中,我们记录了异常并返回一个 ViewResult 对象来显示用户友好的错误信息。
要使用这个过滤器,只需要在 Startup.ConfigureServices 方法中注册它:
services.AddMvc(options =>{ options.Filters.Add();});
中间件处理异常
新建一个中间件在管道中实现全局异常捕获。
public class MyExceptionMiddleware{private readonly RequestDelegate _next;private readonly ILogger _logger;public MyExceptionMiddleware(RequestDelegate next, ILogger logger){_next = next;_logger = logger;}public async Task Invoke(HttpContext context){try{await _next(context);}catch (Exception ex){_logger.LogError($"An exception occurred: {ex}");context.Response.ContentType = "application/json";context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;var jsonResponse = System.Text.Json.JsonSerializer.Serialize(new { error = ex.Message });await context.Response.WriteAsync(jsonResponse);}}}
然后在 Startup.cs 中,注册管道:
app.UseMiddleware();
默认的AspNet Core异常处理
if (env.IsDevelopment()){// dev环境,一旦报错就会跳转到错误堆栈页面app.UseDeveloperExceptionPage();app.UseSwagger();app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "DaXiong.Demo.WebApi v1"));}else{// 非dev环境输出格式,个人根据实际情况扩展app.UseExceptionHandler(errorApp =>{errorApp.Run(async context =>{Console.WriteLine();// 处理异常并生成响应var exception = context.Features.Get().Error;var statusCode = (int)HttpStatusCode.InternalServerError;var message = "An error occurred while processing your request.";// 根据异常类型决定如何响应请求...// 生成响应context.Response.StatusCode = statusCode;context.Response.ContentType = "application/json";await context.Response.WriteAsync(JsonConvert.SerializeObject(new{statusCode,message}));});});}
注意中间件的运行顺序
后添加的中间件返回数据会覆盖,前面的
一般情况使用默认的错误处理中间件也够了
有了异常中间件还需要异常过滤器(IExceptionFilter )吗
IExceptionFilter 作为MVC中间件之间的内容,它需要MVC在发现错误之后将错误信息提交给它处理,因此它的错误处理范围仅限于MVC中间件。所以,假如我们需要捕获MVC中间件之前的一些错误,其实是捕获不到的。 而对于ExceptionHandlerMiddleware中间件来说就很简单了,它作为第一个中间件,凡是在它之后的所有错误它都能够捕获得到。但是,如果你想要在一个控制器或动作方法上执行特定的异常处理逻辑,仍然可以使用 IAsyncExceptionFilter。通过使用该接口,你可以在控制器或动作方法级别组织、记录和响应异常。在这种情况下,控制器或动作方法将优先于全局的 UseExceptionHandler 中间件。
关键词:
下一篇:最后一页
- 女童不慎掉入20米深井 18岁小姨三次下井成功营救
- 西安3个区域12月28日起每日开展全员核酸 官方提倡民众居家健身
- 浙江乐清一核酸检测结果异常人员 复采复检为阴性
- 浙江本轮疫情报告确诊病例490例 提倡“双节”非必要不出省
- 西安警方通报6起涉疫违法案件
- 西安新一轮核酸筛查日检测能力达160万管
- 西安市累计报告本土确诊病例811例
- 重庆曝光4起违反中央八项规定精神典型问题 警示党员干部清新过节
- 云南清水河边检站查获走私玉石和玉石毛料65公斤
- 吉林市政协原党组成员、副主席孙洪彬被开除党籍和公职
-
云南清水河边检站查获走私玉石和玉石毛料65公斤
中新网临沧12月28日电 (徐媛 雷珍玉)记者28日从云南清水河出入境边防检查站获悉,该站近日在清水河口岸查获一起利用货车藏匿走私玉石
-
吉林市政协原党组成员、副主席孙洪彬被开除党籍和公职
中央纪委国家监委网站讯 据吉林省纪委监委消息:日前,经吉林省委批准,吉林省纪委监委对吉林市政协原党组成员、副主席孙洪彬严重违纪
-
陕西延安新增2例确诊病例 活动轨迹公布
陕西延安新增2例确诊病例 活动轨迹公布→ 今日(28日),陕西延安市举行新冠肺炎疫情防控新闻发布会。会上介绍,截至2021年12月28日
-
陕西延安公布新划定中风险地区
12月28日,陕西延安市举行新冠肺炎疫情防控新闻发布会。 为了进一步强化辖区疫情防控工作,延安市宝塔区应对疫情指挥部出台了五条防
-
陕西延安新增2例本土确诊病例 均在宝塔区
今日(28日),陕西延安市举行新冠肺炎疫情防控新闻发布会。 会上介绍,截至2021年12月28日,延安市新增本土确诊病例2例,均在宝塔区
-
西安累计报告本土确诊病例811例
今天(12月28日)下午,西安市召开疫情防控新闻发布会,介绍疫情防控最新进展。 会上通报,2021年12月27日0时-24时,西安市新增本土
-
西安疫情的八个关键问题,专家这么研判
这几天,西安的疫情牵动着全国人民的心。12月27日,西安市新增确诊病例175例。从12月9日0时到12月27日24时,本轮西安全市累计报告本土
-
向家暴说“不 ” 山西各方联动打通反家暴“最后一公里”
中新网太原12月28日电 题:向家暴说“不” 山西各方联动打通反家暴“最后一公里” 作者 吴琼 高瑞峰 赵娟 “对于家庭暴力
-
让农民工不再忧“薪” 湖南祁阳高效根治欠薪
中新网永州12月28日电 (刘志军 周盛波)“感谢你们,没有你们不辞辛苦、多次讨要,我们肯定拿不着钱,这个年肯定过不好。”27日,农民
-
外逃死亡的犯罪嫌疑人张正欣贪污违法所得没收案一审公开宣判
青岛市中级人民法院今天对犯罪嫌疑人张正欣贪污违法所得没收案进行公开宣判,裁定没收高度可能属于张正欣贪污违法所得的5家公司100%股
X 关闭
北京将建立保障房房源长效筹集机制 持续优化审核分配机制
南宁水源地环境问题提前清零 以高质量饮水安全促进乡村振兴
西安新增本土确诊病例150例 详情发布
广东最低气温跌至-6℃现冰挂 部分道路及海上交通受影响
“2022科学跨年系列活动”启动 提高公众对科学类流言“免疫力”
X 关闭
ussd代码怎么解除(ussd) 时快讯
吃一堑长一智啥意思_吃一蛰长一智_世界快看
增值税税收筹划案例分析汇海塑业 增值税税收筹划案例
广东省一共有多少个市分别是什么-广东省一共有多少个市