2010-07-02 62 views
10

我有一個C#web窗體ASP.NET 4.0 Web應用程序使用URL的路由出於某種原因在system.web節中定義了自定義錯誤我的web.config完全被忽略,它會回落IIS錯誤。在IIS7上託管的ASP.NET應用程序忽略了自定義錯誤並回退到IIS錯誤

這被完全忽略

<system.web> 
    <customErrors mode="On"> 
     <error statusCode="500" redirect="~/Error" /> 
     <error statusCode="404" redirect="~/404" /> 
     <error statusCode="403" redirect="~/Error" /> 
    </customErrors> 
    </system.web> 

這部分接管

<system.webServer> 
    <httpErrors> 
     <!--<clear />--> 
     <remove statusCode="500" subStatusCode="-1" /> 
     <remove statusCode="404" subStatusCode="-1" /> 
     <error statusCode="404" subStatusCode="-1" path="/App1/404" responseMode="Redirect" /> 
     <error statusCode="500" prefixLanguageFilePath="" path="/App1/Error" responseMode="Redirect" /> 
    </httpErrors> 
    </system.webServer> 

這將是一個小麻煩,除了通過它回落到IIS本地的,而不是我的應用它完全規避的事實Elmah正確記錄我的404例外。

編輯:只是爲了避免這樣的建議我只在customErrors停止工作後添加httpErrors配置,所以我會有任何東西。

+2

我不明白這一點。對於404錯誤,似乎有一個使用這裏提出的「通配符路由」的常見解決方法:http://stackoverflow.com/questions/2704338/asp-net-4-0-web-forms-routing-default-wildcard - 路線。我還注意到,當您輸入以'.aspx'結尾的錯誤網址時,自定義404頁面會啓動。但是,如果我省略了擴展名,我將被重定向到IIS的默認錯誤頁面,就像你所說的那樣。我絕對不知道如何獲得自定義錯誤頁面,而不是404以外的其他錯誤。我很好奇你的問題將如何結束。 – Slauma 2010-07-13 13:56:44

+0

我很高興聽到這種情況發生在別人身上,因爲在我意識到如何配置httpErrors之前,我幾乎處於茫然之中。 – 2010-07-13 14:38:41

回答

13

要禁用,你必須設置

Response.TrySkipIisCustomErrors = true; 

在錯誤頁的IIS錯誤消息。之後,您的錯誤消息應該顯示沒有問題。

+0

這是從我最初的護目鏡看,最有成效的,我現在正在嘗試這個。關於Rick Strahl關於此主題的好帖子:http://www.west-wind.com/weblog/posts/745738.aspx – 2010-07-19 13:05:25

1

您是否設置了忽略錯誤和404的路由?

+0

除非你意外地做到這一點,否則我會選擇否,因爲我沒有這樣做的意圖。是什麼讓路線表現如此呢? – 2010-07-19 12:40:23

8

而不是使用:

Response.TrySkipIisCustomErrors = true; 

使用該Web.config中:

<httpErrors errorMode="Custom" existingResponse="Replace"> 
+1

你從哪裏看到第一個代碼? – 2012-10-02 12:20:15

+1

實際上,我必須使用existingResponse =「PassThrough」 – 2013-02-13 14:38:04

+0

此選項在IIS 8.5上適用於我。謝謝! – 2015-07-14 16:17:09

0

您可以通過兩種方式 一種是設置通過IIS7默認的錯誤消息response.TrySkipIisCustomErrors = true

response.TrySkipIisCustomErrors = true; 
response.Status = response.Status; 

由於某些原因,如果您沒有設置response.Status,TrySkipIisCustomErrors不會被兌現。

另一種是在web.config中

<configuration> 
    <system.webServer> 
    <httpErrors existingResponse="PassThrough" /> 
    </system.webServer> 
</configuration> 

設置existingResponse爲「直通」但是,這會忽略所有的IIS設置自定義錯誤頁。

相關問題