2011-11-30 71 views
2

我在StackOverflow和其他網站上看到過很多類似的問題,但似乎沒有解決我遇到的問題。IIS7 - ASP.NET customErrors,IIS httpErrors的組合

我想配置一個站點以返回一個500錯誤狀態代碼和一個自定義錯誤頁面(靜態HTML文件),這些錯誤通常會返回一個500,其中customErrors設置爲「Off」,而404我們的系統報告沒有找到頁面的狀態代碼(404頁面不是通過IIS設置的靜態頁面,它是由我們的CMS系統生成的)。

我在那裏的一部分,但我打了一磚牆。

目前,我能夠返回正確的404狀態碼,我們的系統返回一個帶有404狀態碼的頁面,但是我現在無法返回ASP.NET服務器錯誤的500狀態碼。我通過設置Response.TrySkipIisCustomErrors = true來管理這個。然而,我的500個錯誤證明更加複雜。如果我從web.config中刪除了customErrors配置部分,我得到了500錯誤,但它是醜陋的ASP.NET YSOD。無論我使用httpErrors config部分使用什麼設置,也無論我通過IIS GUI設置什麼設置,我似乎無法將其指向使用IIS的自定義頁面。如果我添加了customErrors部分,我得到了自定義錯誤頁面,但我得到了200或302錯誤(取決於redirectMode屬性的值)。

任何人有任何想法?

在httpErrors配置部分我已經試過以下至今方面:

設置errorMode爲「自定義」,並指定我用的「500」一個錯誤的StatusCode靜態內容的「一subStatusCode -1 「(先刪除現有的500錯誤) 將errorMode設置爲」詳細「並指定我的靜態內容中的狀態碼爲」500「和子狀態代碼爲」-1「的錯誤(先刪除現有500錯誤) 設置existingResponse =」PassThrough 「用於上述兩種配置選項。

+0

我在IIS7.0和IIS7.5中都有相同的行爲。當我回到辦公室時,我會在幾個小時內發佈當前web.config中的相關內容。 –

+0

恕我直言,爲了完成問題和真實樣本的答案。 – Kiquenet

回答

0

看來你可能會超出你需要做的事情,那就是如果我正確理解你。 Here is a good link

看來你需要的是處理global.asax Application_Error事件。這樣,你可以處理它,無論如何你喜歡,你沒有得到那個醜陋的asp.net錯誤屏幕。我創建的任何Web應用程序我在那裏放置了一些代碼來處理錯誤,因此用戶不會看到任何未格式化的「blow ups」

+0

我們實際上正在運行一個HttpModule,它已經在Application_Error處理程序中執行了自定義日誌記錄的工作,但是當我們的客戶端使用的工具查找500個狀態代碼來指示幾個主要問題時,仍然需要拋出500錯誤因此我們需要拋棄它們以保持一致,但我們不希望最終用戶看到YSOD,因爲我們有一個非常好的人類可讀的錯誤頁面,以保持用戶體驗的一致性,並保留底層錯誤的細節從窺探的眼睛。 –

+0

你能發佈一些代碼嗎?我已經做了很多這種類型的錯誤處理,它似乎不應該這麼難。它很難指出它沒有代碼。 – Etch