难以理解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
}
答案 0 :(得分:0)
解决了这个难题。问题根本不在.net核心或异常属性中。我正在为dataManagers和dataAccess实例使用拦截器,因此在这些实例之一中引发异常后,拦截器会包装该错误并将其返回为正常结果,这会导致OnResultExecuted调用中包含异常。