.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了一个异常,下面就看能不能捕获异常。在异常过滤器的方法中我有一个写入日志的动作,且有返回信息的处理。等调用完接口,看这两个地方就知道咱们的过滤器是否好用了。
如图所示,现在返回信息是没有问题的。下面看一下日志中的记录
通过日志文件的查看,发现异常过滤器已经生效了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!