抛出HttpResponseException未被ExceptionFilterAttribute捕获

本文关键字:捕获 ExceptionFilterAttribute 未被 HttpResponseException 抛出 | 更新日期: 2023-09-27 17:53:25

我有一个类:

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将被调用从控制器方法内抛出的所有异常?

抛出HttpResponseException未被ExceptionFilterAttribute捕获

这是因为HttpResponseException被IHttpActionInvoker内部捕获并创建HttpResponseMessage;因此这个特殊的异常不能被捕获。