2009-02-27 75 views
0

這個問題與Handle URI hacking gracefully in ASP.NET有關,因爲它太關於如何最好地處理在ASP.NET請求生命週期中發生的異常。我找到了一種方法來優雅地處理大多數異常,但後來發現在請求中發生了一些異常,因此無法像Server.Transfer那樣將整個錯誤表示邏輯劃分到它自己的頁面中。如何在ASP.NET請求生命週期中處理異常

因此,我必須處理Application_Error事件中的異常,而不是Response.Write和什麼。它很醜。我知道在某些情況下,響應流可能已經被刷新,因此傳輸請求並不是真正的選擇。我想問的是,是否有人找到了解決此問題的優雅解決方案?

此外,我發現很難知道什麼時候可以通過將請求轉移到另一個頁面而不是正常處理異常。發現異常時,找出我們所處的請求生命週期中的哪個位置的最佳方法是什麼?如果它在加載和呈現頁面期間發生,Page_Error將能夠處理它,並且在那裏我還沒有遇到問題Server.Transfer。但是,如果Page_Error發現異常發生時間太早或太遲而無法捕捉到,並且它會冒泡到Application_Error,我該怎麼做才能知道它是早期還是晚期?

如果它在生命週期的後期,我可能必須直接從Application_ErrorResponse.Write,但如果它提前,我可以做Server.Transfer。問題是試圖做Server.Transfer本身會導致一個異常,如果它太請求執行它。

那麼,是否有一個全球性的枚舉或類似的東西,表明是否已經太遲了,以創造性的東西與答覆或不?

回答

0

我想我的這個建議是使用與WMI活動提供ASP.NET健康監測的錯誤:

這裏是一個如何。

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

希望這有助於:

安德魯

+0

嗨,謝謝你的建議。 外部控制檯應用程序不會真的幫助,因爲我想要的不僅是捕捉錯誤(我已經做得很好),而且還顯示友好的錯誤消息。 – 2009-02-27 11:44:57

+0

您使用的是自定義錯誤頁面嗎?這使您可以基於任何基於任何請求結果拋出的Http狀態碼來顯示自定義信息? – 2009-02-27 12:05:15

0

我建議你使用asp.net配置有對未處理的異常一般錯誤頁面。從示例web.config

<!-- 
     The <customErrors> section enables configuration 
     of what to do if/when an unhandled error occurs 
     during the execution of a request. Specifically, 
     it enables developers to configure html error pages 
     to be displayed in place of a error stack trace. 

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> 
     <error statusCode="403" redirect="NoAccess.htm" /> 
     <error statusCode="404" redirect="FileNotFound.htm" /> 
    </customErrors> 
    --> 

在整個處理程序上,只記錄異常,並讓asp.net做重定向。

如果你仍然想繼續你的客戶的方法,我建議你看看可用的asp.net源代碼,並檢查它是如何做到這一點。