.net core 实例教程(五)项目异常处理,ExceptionFilter异常拦截器配置
小白浏览:4542024-03-18 11:24:15本文累计收益:0我也要赚钱

本文源码下载地址:http://www.80cxy.com/Blog/ResourceView?arId=202403191532545995NAAqJh

系列教程地址:http://www.80cxy.com/Blog/ArticleView?arId=202403191517574161ay3s5V

按照常规程序异常处理直接用try{}catch(){}括起来,但是每个方法都这样加比较麻烦,.net core支持集中异常处理Filter。下面是Filter代码及如何进行全局配置。

一、ExceptionFilter

在SignUp.Common项目中新增Filter文件夹,并新建ExceptionFilter类实现IAsyncExceptionFilter接口。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Hosting;
using SignUp.Common.Commons;
 
namespace SignUp.Common.ASPNETCore
{
    public class ExceptionFilter : IAsyncExceptionFilter
    {
        private readonly IWebHostEnvironment hostEnv;
        public ExceptionFilter(IWebHostEnvironment hostEnv) {
            this.hostEnv = hostEnv;
        }
        public Task OnExceptionAsync(ExceptionContext context)
        {
            //异常信息
            string msg;
            if (hostEnv.IsDevelopment())
            {
                msg = context.Exception.ToString();
            }
            else {
                msg = "服务器端发生未处理异常";
            }
            //返回异常信息
            context.Result = new JsonResult(new ResponseContent().Error(500,msg));
            //其他exceptionFilter不会在执行
            context.ExceptionHandled = true;
            return Task.CompletedTask;
        }
    }
}
二、全局配置ExceptionFilter

在WebApplicationBuilderExtensions配置类的ConfigureExtraServices方法增加如下配置代码:

1
2
3
4
5
6
//现在不用手动AddMVC了,因此把文档中的services.AddMvc(options =>{})改写成Configure<MvcOptions>(options=> {})这个问题很多都类似
services.Configure<MvcOptions>(options =>
{
     //异常filter配置
    options.Filters.Add<ExceptionFilter>();
});
学习交流

附笔者学习 .net core开发时参考相关项目实例源码:asp.net core webapi项目实例源代码锦集下载(72个)

评论列表
发表评论
+ 关注