2015-06-03 89 views
2

抓到我有一個類:拋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將被調用以控制器方法內拋出的所有異常?

+0

你是否嘗試過實現一個異常處理程序而不是一個異常過濾器? –

回答

2

這是因爲HttpResponseException被IHttpActionInvoker內部捕獲並創建HttpResponseMessage;因此這個特殊的例外不能被捕獲。

相關問題