.NetCore——全局异常过滤器ExceptionFilterAttribute

.NetCore——全局异常过滤器ExceptionFilterAttribute

一、介绍
在我们的项目运行中,当程序出现异常的时候就会弹窗大黄页,所以为了更方便的解决这个问题,我们采用全局过滤器 ExceptionFilterAttribute 。通过它主动捕获程序中的异常,然后经过处理再抛出信息。下面咱们直接上干货,撸起来。
二、使用
首先创建一个 MyExceptionFilter 继承 ExceptionFilterAttribute 并重写 OnException方法。在方法中写自己处理逻辑,如图
在这里插入图片描述

 public class MyExceptionFilter : ExceptionFilterAttribute
    {

        LoggerHelper _loggerHelper;

        public MyExceptionFilter(LoggerHelper loggerHelper)
        {
            _loggerHelper = loggerHelper;
        }

        public override void OnException(ExceptionContext context)
        {
            // 如果异常没有被处理则进行处理
            if (context.ExceptionHandled == false)
            {
                //定义返回信息
                Response res = new Response();
                res.Code = 500;
                res.Message = "发生错误,请联系管理员";

                //写入日志
                _loggerHelper.Error(context.HttpContext.Request.Path, context.Exception);

                context.Result = new ContentResult
                {
                    // 返回状态码设置为200,表示成功
                    StatusCode = StatusCodes.Status200OK,
                    // 设置返回格式
                    ContentType = "application/json;charset=utf-8",
                    Content = JsonConvert.SerializeObject(res)
                };
            }
            // 设置为true,表示异常已经被处理了
            context.ExceptionHandled = true;
        }
    }

下面在Startup的ConfigureServices方法中注册,添加到全局使用。如图
在这里插入图片描述
这样就算完成了。下面开始测试是否可以使用
在这里插入图片描述
再图中可以看到我写了一个GetTest的测试方法,并且new了一个异常,下面就看能不能捕获异常。在异常过滤器的方法中我有一个写入日志的动作,且有返回信息的处理。等调用完接口,看这两个地方就知道咱们的过滤器是否好用了。
在这里插入图片描述
如图所示,现在返回信息是没有问题的。下面看一下日志中的记录
在这里插入图片描述
通过日志文件的查看,发现异常过滤器已经生效了。
三、总结
这就是全局异常过滤器的简单使用的全部了。
我用的环境是vs2019,.netCore3.1。
日志使用的是Log4,通过.netcore的注入了一个实现类,进行日志的记录

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值