2011-09-24 55 views
2

我有一個asp.net MVC3應用程序。在我的控制器中,我有一個使用Response.StatusCode = 600設置自定義響應代碼的ajax動作。我需要通過響應,而IIS不嘗試查找自定義錯誤頁面。我試着用下面的代碼來讓IIS不使用它的自定義頁面爲600httpErrors errorMode =「詳細」只適用於特定的錯誤代碼

<!-- Pass through Ajax Errors with status code 600 --> 
    <httpErrors errorMode="Detailed" existingResponse="PassThrough"> 
     <error statusCode="600" path="/" /> 
    </httpErrors> 
<!--End --> 

響應狀態上述片段中的問題是,這適用於所有響應代碼,這樣即使代碼失敗500內部服務器,響應按原樣通過,無IIS干擾。這暴露了我的內部控制器和視圖代碼給用戶(如果碰巧發生了一些我沒有處理的異常)。

那麼,如何配置web.config只有在response.statuscode爲600(自定義)時才能通過詳細響應,併爲其他錯誤(例如Internal Server Error 500)提供默認IIS自定義頁面。

+0

嘗試添加''到''它會解決它,因爲我認爲。 –

回答

0

在web.config我這樣設置自定義錯誤部分:

<customErrors mode="On"> 
    <error statusCode="404" redirect="~/Home/NotFound"></error> 
</customErrors> 

然後在控制器,我仍然設置[HandleError]屬性我上面的控制器。所有未處理的異常都轉到共享中的正常錯誤頁面。任何404錯誤都會轉到NotFound頁面。

2

如果在集成的管道模式下運行,你可以嘗試TrySkipIisCustomErrors屬性設置爲true:

Response.StatusCode = 600; 
Response.TrySkipIisCustomErrors = true; 

這是說的HTTP specification明確定義了響應HTTP狀態代碼不優於5XX。所以設置Response.StatusCode = 600;看起來很不尋常。你究竟想要達到什麼目的,以及規範中定義的標準HTTP響應代碼爲什麼不能涵蓋你的方案?