asp.net-core - 当服务抛出异常时,未调用 ExceptionFilterAttribute.OnException
问题描述
无法理解 ExceptionFilterAttribute 何时调用 OnException 方法。
假设我有 2 个注册过滤器:
filters.Add<ExceptionFilter>();
filters.Add<ActionExecutionFilter>();
其中 ExceptionFilter 覆盖 OnException 并且 ActionExecutionFilter 具有 OnActionExecution 并且出于测试目的它具有 OnResultExecuted。
我发现 - 如果我直接将异常抛出到操作中,它会调用 OnException 方法,但如果我在我的任何依赖注入服务中抛出异常(参见示例),那么它不会调用 OnException 方法。当在任何这些情况下发生异常时(第二个示例),我知道 ActionFilter 将调用 OnResultExecuted 方法,我可以在其中看到异常,该异常直接进入中间件异常处理程序。
我想知道的是,如果 Result 中有异常,为什么 ExceptionFilter 不调用任何方法。
例子:
public ActionResult SomeActionMethod()
{
throw new Exception("this one calls OnException");
//Logic
}
public ActionResult SomeActionMethod()
{
var result = this._injectedService.ThrowExceptionMethod(); // --> This one doesn't call OnException if it appears
//Logic
}
解决方案
解决了这个难题。问题根本不在 .net 核心或异常属性中。我正在为 dataManagers 和 dataAccess 实例使用拦截器,因此在我在其中一个实例中引发异常之后,拦截器会包装该错误并将其作为正常结果返回,这会导致 OnResultExecuted 调用其中包含异常。
推荐阅读
- c++ - 获取 URL 的最后一部分
- mysql - MySQL Cross Tab - 努力将作为行的值移动到列中
- sublimetext3 - Sublime Text 3:如何删除 Channel JSON URL
- azure - Azure AD,用于访问 Azure SQL
- python - 扫描字符串文字时 EOL [在 python 套接字中]
- javascript - Firebase 异步调度程序问题
- javascript - 如何读取另一个 javascript JSON 类别
- javascript - 防止响应集cookie中的url编码 - nodejs
- jquery - JQuery Date Picker如何每天添加id?
- java - 为什么JDK不提供IGE分组密码模式