c# - 抛出 HttpResponseException 未被 ExceptionFilterAttribute 捕获

标签 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 Controller 方法抛出 HttpResponseException,它似乎绕过了异常过滤器。我收到了按预期返回的响应,但这不是因为异常过滤器正在执行的任何操作(未调用 OnException 方法)。

是什么导致我的异常过滤器出现这种“选择性”行为?我如何确保为从 Controller 方法中抛出的所有异常调用 OnException?

最佳答案

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

关于c# - 抛出 HttpResponseException 未被 ExceptionFilterAttribute 捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628044/

相关文章:

angularjs - Web Api 2 Preflight CORS 请求承载 token

c# - OWIN 究竟使用什么函数来生成 token ;可以杠杆吗?

c# - 如何区分电子邮件Imap中的内联图像和签名以及其他空白图像

c# - 从 Dropbox 上的公共(public)共享文件夹和子文件夹下载图像

C# DateTimePicker 陷入循环

c# - 如何将signalR实现到通过后端服务连接的两个项目

c# - InRequestScope 无法在 ExceptionLogger 上下文中工作

c# - System.Web.Http.Results.OkResult 与内容(HttpStatusCode.OK)

c# - 产卵 BackgroundWorkers

c# - 在尝试 Process.Start() 之前,如何以编程方式检查文件是否存在文件关联?