从服务引发异常时,不调用ExceptionFilterAttribute.OnException

时间:2018-09-29 10:24:37

标签: asp.net-core .net-core

难以理解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
}

1 个答案:

答案 0 :(得分:0)

解决了这个难题。问题根本不在.net核心或异常属性中。我正在为dataManagers和dataAccess实例使用拦截器,因此在这些实例之一中引发异常后,拦截器会包装该错误并将其返回为正常结果,这会导致OnResultExecuted调用中包含异常。