HttpResponseException的抛出未被ExceptionFilterAttribute捕获

4

我有一个类:

public class ApiExceptionFilterAttribute : ExceptionFilterAttribute,IExceptionFilter
{        public override void OnException(HttpActionExecutedContext context)
    {
        // ... etc...
    }
}

我在global.asax.cs中注册了以下内容:

...
public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        var exceptionFilter = new ApiExceptionFilterAttribute();

        GlobalConfiguration.Configuration.Filters.Add(exceptionFilter);

    }
}

我的应用程序以各种方式抛出异常,在大多数情况下,我可以看到 OnException 方法按预期被调用。然而,如果我的 Web Api 控制器方法抛出 HttpResponseException,则似乎会绕过异常过滤器。我得到了一个返回的响应,但这不是因为异常过滤器在做什么(OnException 方法没有被调用)。
是什么导致了这种“选择性”行为的异常过滤器?如何确保 OnException 会被调用来处理控制器方法中抛出的所有异常?

你是否尝试过实现异常处理器而不是异常过滤器? - Matías Fidemraizer
1个回答

5
这是因为HttpResponseException被IHttpActionInvoker内部捕获并创建HttpResponseMessage;因此,这个特殊异常无法被捕获。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接