HOW TO:處理應用程式層級的錯誤
更新:2007 年 11 月
這個程式碼範例將示範如何在 Global.asax 檔案中建立錯誤處理常式,它會在處理要求時攔截所有未處理的 ASP.NET 錯誤,換句話說,就是無法以 Try/Catch 區塊或頁面層級錯誤處理常式攔截的所有錯誤。在這個範例中,處理常式會將控制項傳送至名為 GenericErrorPage.aspx 的泛型錯誤頁面,它將解譯錯誤並顯示適當的訊息。
範例
下列範例是來自錯誤處理常式的完整範例中的完整程式碼範例。
為了啟用 Global.asax 檔案中的錯誤事件處理常式,Web.config 檔案無法為 defaultRedirect 指定檔案。但組態檔會優先採用,因此可以須將 customErrors 設為 Off,或者移除 defaultRedirect 設定。如果 Web.config 組態檔中有設為 Off 的 customErrors,則 Global.asax 中的 Application_Error 事件處理常式將處理所有未處理的錯誤。
安全性注意事項: |
---|
如果 Global.asax 檔案中沒有 Application_Error 處理常式,請不要將 Web.config 檔案中的 customErrors 設為 Off,這會使任何可能對網站引發錯誤的使用者接觸到可能洩漏的網站資訊。 |
穩固程式設計
最好在任何容易發生錯誤的程式碼周圍使用 Try/Catch 區塊,而不依賴於全域錯誤處理常式。
Global.asax 檔中定義的錯誤處理常式只會攔截在 ASP.NET 執行階段處理要求期間發生的錯誤。例如,如果使用者要求應用程式中不存在的 .aspx 檔案,它就會攔截該錯誤。然而,如果使用者要求不存在的 .htm 檔案,則不會攔截錯誤。針對非 ASP.NET 錯誤,您可以在網際網路資訊服務 (IIS) 中建立自訂處理常式。但也不會對伺服器層級錯誤呼叫自訂處理常式。
您無法從 Global.asax 檔中直接輸出要求的錯誤資訊,而是必須將控制項傳送至其他網頁 (通常是 Web Form 網頁)。將控制項傳送至其他網頁時,請使用 Transfer 方法。如此會保存目前的內容,以便您從 GetLastError 取得錯誤資訊。
處理錯誤之後,您必須藉由呼叫 Server 物件 (HttpServerUtility 類別) 的 ClearError 方法清除錯誤。
安全性
請確定不會顯示可能有助於惡意使用者破壞應用程式的錯誤資訊。如需詳細資訊,請參閱 HOW TO:顯示安全錯誤訊息。