UseExceptionHandler捕获中间件管道未处理异常,IExceptionFilter仅处理MVC层Action内异常;两者可共存,前者兜底后者细粒度定制。ASP.NET Core 里 UseExceptionHandler 和 IExceptionFilter 到底该用哪个控制器报错捕获,不是"加个过滤器就行",得看错误发生在哪一层。UseExceptionHandler 捕的是中间件管道里未处理的异常(包括控制器抛出但没被 catch 的),而 IExceptionFilter 只管 MVC 层------也就是 Controller 执行过程中、进入 Action 之后、返回结果之前这段。如果异常发生在模型绑定、授权过滤器或自定义中间件里,IExceptionFilter 根本收不到。UseExceptionHandler 是兜底方案,适合统一返回错误页或 JSON 错误响应,但拿不到 ActionContext,没法做细粒度响应定制(比如按不同 Controller 返回不同结构)IExceptionFilter 能访问 ExceptionContext 和当前 action 信息,适合记录日志、补充上下文、局部响应覆盖,但对 400 Bad Request(如模型验证失败)这类非异常流程无效两者可以共存:先由 IExceptionFilter 处理可预判的业务异常,再靠 UseExceptionHandler 拦住漏网的运行时崩溃OnException 里为什么 context.Result 设了却没生效常见现象:在 OnException 方法里写了 context.Result = new JsonResult(...),但浏览器还是看到默认黄页或空响应。根本原因是没调 context.ExceptionHandled = true ------ ASP.NET Core 默认认为你只是"看了眼异常",还要继续往上抛。必须显式设 context.ExceptionHandled = true,否则后续中间件(包括 UseExceptionHandler)仍会介入不要在 OnException 里 throw 新异常,这会导致二次崩溃,且可能绕过你刚设的 Result如果用了 ApiController 特性,部分异常(如 ModelStateInvalid)根本不会触发 IExceptionFilter,它走的是内置的 InvalidModelStateResponseFactory全局过滤器注册时 AddControllers 和 AddMvc 的区别项目模板不同,API 和 MVC 混用时容易配错入口。.NET 6+ 推荐用 AddControllers,它只注册控制器相关服务;而 AddMvc 还带视图引擎、Razor Pages 等一堆你可能不需要的东西,体积大、启动慢,且在纯 API 项目里反而可能引入意外行为(比如试图解析 .cshtml)。 知网AI智能写作 知网AI智能写作,写文档、写报告如此简单
相关推荐
姜鱼问生12 分钟前
docker exec 排查容器问题:从日志到进程打工仔折腾 AI16 分钟前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录yi01117 分钟前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针kimnoic29 分钟前
Python常用命令提示符使用方法详解狗凯之家源码网41 分钟前
AI 步数修改提交系统源码应用场景与落地指南Είναι η κοπέλα42 分钟前
模型量化完全指南:GGUF、GPTQ、AWQ 怎么选穆梓兰煊43 分钟前
AI供应链安全不再只是包安全,还涉及模型与数据yi0111 小时前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?weixin199701080161 小时前
《1688消息服务落地方案:alibaba.message.* 与 Webhook 回调的可靠性与重试策略》(附Python源码)北风toto1 小时前
数据库笔记:Armstrong 公理系统与集合论的深度辨析