You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core调试模式下控制器调用类库时Try-Catch失效

问题根源与解决方案

看起来你遇到的并不是代码层面的异常捕获失效,而是Visual Studio调试器的默认行为给你造成的错觉!咱们一步步拆解:

为什么调试时会觉得Try-Catch和过滤器没工作?

VS调试器默认会在任何异常被抛出的瞬间就中断程序执行——哪怕你的代码里已经写了Try-Catch块来处理这个异常。当Queries.Authentication.GetUser抛出RetrievalException时,调试器直接停在了抛出异常的那一行,让你误以为后续的Catch块和自定义过滤器没起作用,但实际上只要你按下F5(继续执行),代码就会正常进入控制器的Catch块,自定义异常过滤器也会按预期处理异常。

调整调试设置,让调试流程更符合预期

你可以修改VS的异常设置,避免调试器打断那些已经被代码处理的异常:

  • 打开异常设置窗口:可以通过快捷键Ctrl+Alt+E,或者点击菜单调试 > Windows > 异常设置
  • 在异常列表中找到你自定义的RetrievalException(或者展开「Common Language Runtime Exceptions」,定位到它所在的命名空间)
  • 取消该异常的「抛出」选项(只保留「未处理」的勾选即可)
  • 如果你希望全局禁用已处理异常的中断,也可以直接取消「Common Language Runtime Exceptions」的「抛出」勾选,但这样可能会错过一些未被处理的异常抛出点,建议按需调整。

确认你的代码逻辑是没问题的

从你贴出的代码来看,异常处理的逻辑完全正确:

  • 控制器中的Try-Catch块明确捕获了RetrievalException和通用Exception
  • 自定义CustomExceptionFilter正确识别了RetrievalException,并返回了404 Not Found的响应
  • ConfigureServices中也正确将过滤器注册到了Mvc的全局过滤器集合中

而你提到发布后无此问题,也进一步验证了代码本身没有问题,只是调试器的默认设置干扰了你的判断。

内容的提问来源于stack exchange,提问作者Cornel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:33:31