我有一个班级:
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?
答案 0 :(得分:4)
这是因为HttpResponseException在内部由IHttpActionInvoker捕获并创建HttpResponseMessage;因此,这个特殊的例外情况无法被捕获。