抛出HttpResponseException没有被ExceptionFilterAttribute捕获

时间:2015-06-03 18:37:44

标签: c# asp.net-web-api2

我有一个班级:

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?

1 个答案:

答案 0 :(得分:4)

这是因为HttpResponseException在内部由IHttpActionInvoker捕获并创建HttpResponseMessage;因此,这个特殊的例外情况无法被捕获。