2

我想在我的MVC 3 Web應用程序中設置http自定義錯誤頁面。我已經添加了以下到我的web.config:httpErrors不重定向到正確的頁面與MVC 3

<httpErrors errorMode="Custom" defaultResponseMode="ExecuteUrl" defaultPath="/Error/404"> 
    <clear /> 
    <error statusCode="500" path="/Error/404" 
</httpErrors> 

當一個請求我預計這將用戶重定向my.domainname.com/Error/404出現500錯誤。

我有一個錯誤控制器,其中包含一個稱爲錯誤的操作,我已將404的請求映射到此操作。

當我強迫網站上的500錯誤(通過Chrome開發者工具的網絡選項卡驗證)我收到一個空白頁以下消息:

「該頁面無法顯示,因爲發生了內部服務器錯誤。 「

如果我從我的web.config中刪除httpErrors部分,那麼我會得到實際的異常消息。因此,我在web.config中的httpErrors部分必須工作,我只是不明白如何正確設置它。

這是我選擇的屬性,爲什麼清單:

errorMode =「自定義」:那麼,我可以看到自定義錯誤頁,並驗證它正在將其更改爲僅本地之前。

defaultResponseMode =「ExecuteUrl」:這應該允許我指定一個服務器相對url作爲路徑,這聽起來像我想要的,因爲我想要控制器操作。

defaultPath =「/ Error/404」:如果我沒有指定一個,我想要求的相對url。

編輯:

我應該補充說,該網站在IIS 7.5上運行。我也不希望使用這個標籤,因爲它被設計爲與IIS 6一起使用,並且應該用於IIS 7+。

回答

0

嘗試使用web.config(內部system.web)中的customErrors部分代替。

http://msdn.microsoft.com/en-us/library/h0hfz6fc.aspx

例如

<customErrors mode="On"> 
     <error statusCode="404" redirect="Error/404" /> 
     <error statusCode="500" redirect="Error/500" /> 
    </customErrors> 
+0

對不起,我會更新我的問題。它確實與customErrors部分一起工作,但這不是一個理想的解決方案,因爲它們現在是一個遺留選項,並且設計用於IIS 6. – Aesir 2012-04-24 11:34:36

+0

設置defaultResponseMode =「重定向」並將路徑設置爲絕對URL是否工作?我知道這不完全是你想要的,因爲使用相對路徑更好,但可能有助於調試問題。 – 2012-04-24 11:51:12

+0

在這種情況下,我無法設置絕對路徑,因爲子域可能會有所不同,並可供用戶更改。所以my.domainname.com可以是test.domainname.com等。所以我需要的路徑是相對的。 – Aesir 2012-04-24 13:31:45

0

它應該像Controller/Action/Id。在你的情況下,行動缺失。檢查以下示例,並根據您的操作方法更改它...

<system.web> 
    <customErrors mode="On" defaultRedirect="/Error/Index/" > 
     <error statusCode="401" redirect="/Error/NoAccess/" /> 
     <error statusCode="404" redirect="/Error/NotFound/" /> 
    </customErrors> 
    .... 
</system.web> 
+0

我的控制器是錯誤的,我在這個控制器上的動作也是錯誤的,但我已經映射404到這個動作。因此Error/404應該可以正常工作,如果我直接提出這個請求:my.domainname.com/Error/404會顯示正確的頁面。我也更新了我的問題,指定我不想將CustomErrors部分用作解決方案。乾杯! – Aesir 2012-04-24 11:43:13

+0

看看這裏。它可能會幫助你http://stackoverflow.com/questions/3554844/asp-net-mvc-404-handling-and-iis7-httperrors – Kaf 2012-04-24 12:18:56