编程语言
首页 > 编程语言> > C#-HttpResponseException的抛出未被ExceptionFilterAttribute捕获

C#-HttpResponseException的抛出未被ExceptionFilterAttribute捕获

作者:互联网

我有一堂课:

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在内部被IHttpActionInvoker捕获并创建了HttpResponseMessage.因此无法捕获此特殊异常.

标签:asp-net-web-api2,c
来源: https://codeday.me/bug/20191028/1951013.html