• .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的注入了一个实现类,进行日志的记录

    原文:https://blog.csdn.net/qq_40579788/article/details/107617098

  • 相关阅读:
    APIO dispatching
    奶牛抗议
    擦弹
    逃跑
    [Hnoi2016]网络
    [Ahoi2005]LANE 航线规划
    素数密度_NOI导刊2011提高(04)
    P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)
    洛谷P3396 哈希冲突(分块)
    洛谷P4332 [SHOI2014]三叉神经树(LCT)
  • 原文地址:https://www.cnblogs.com/johnblogs/p/14785460.html
Copyright © 2020-2023  润新知