2012-05-18 15 views
2

我有以下異常過濾器:爲什麼Asp.NET WebApi在使用ExceptionFilter的響應中呈現IIS錯誤頁面?

public class ServiceLayerExceptionFilter : ExceptionFilterAttribute 
    { 
     public override void OnException(HttpActionExecutedContext context) 
     { 
      if (context.Result == null) 
      { 
       context.Result = new HttpResponseMessage(); 
      } 

      context.Result.StatusCode = context.Exception.ConvertToHttpStatus(); 
      base.OnException(context); 
     } 
    } 

我ConvertToHttpStatus()僅僅是一個擴展,它查找異常類型,其映射到HttpStatusCodes的Dictionary對象。 http狀態代碼正在正確轉換。但是,在響應有效負載中,我得到一個IIS錯誤頁面。最好我想讓這個響應爲空,或者更好的是將異常消息作爲json傳遞。有誰知道我爲什麼得到返回的IIS錯誤頁面,以及如何返回空的或有效的內容?

+0

什麼是「Accept」標頭?它是「beta」還是每晚構建*? – Aliostad

+0

這是使用NuGet包進行測試版。請求中的Accept頭是:Accept:*/* – jaffa

+0

那麼這是什麼問題?您正在接受所有內容,系統會向您發送HTML。使用'accept:application/json'並且應該給你發送JSON響應。 – Aliostad

回答

3

您沒有向您創建的HTTP響應消息寫入任何內容。嘗試添加一些內容:

public class ServiceLayerExceptionFilter : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     var message = new HttpResponseMessage(HttpStatusCode.InternalServerError); 
     message.CreateContent(typeof(Foo), new Foo { Bar = "baz" }); 
     context.Result = message; 
    } 
} 
+0

太棒了,那正是我錯過的! – jaffa

相關問題