Asp.net
ASP.NET Webforms 中的異常處理
在 ASP.NET Webforms 中處理異常的首選方法是什麼?
您擁有
Page_Error在級別添加(我認為)的方法web.config,並且當發生錯誤時整個站點都會被重定向到那裡。這是否意味著您不應該在 webforms 應用程序的任何地方使用 try-catch ?(假設您不想隱藏任何錯誤)
只擷取您可以處理的錯誤。如果您可以以允許頁面繼續載入的方式處理它們,那麼就這樣做。任何其他會破壞頁面的異常都不應該在任何控制項或頁面中處理,因為無論如何您都無法執行任何操作。讓它轉到 global.asax 處理程序並確保記錄異常。
- Web 應用程序通常由 UI、業務和數據訪問層組成。每一層都必須在異常處理方面發揮作用。每個層都必須(為了程式碼重用性)檢查錯誤條件並包裝異常(在記錄它之後),並可能傳播到呼叫層。UI 層應該隱藏異常並顯示友好的消息。在 UI 中擷取所有異常可能不是一個好主意。如果可能,應將異常記錄在數據庫中。這將便於維護和糾正錯誤
- 盡可能避免擷取異常。在使用它們之前嘗試並驗證所有輸入。在驗證控制項、自定義控制項和正則表達式的幫助下嚴格驗證(客戶端和伺服器端)輸入是必須的。
string fname = "abc"; //Always check for condition, like file exists etc... if (System.IO.File.Exists(fname)) { } else { }
- 始終確保呼叫了清理程式碼。使用語句或最後嘗試。
- 您可以在 Global.asax(asp.net 應用程序文件)中擷取所有異常
void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs Exception objErr = Server.GetLastError().GetBaseException(); string err = "Error Caught in Application_Error event\n" + "Error in: " + Request.Url.ToString() + "\nError Message:" + objErr.Message.ToString()+ "\nStack Trace:" + objErr.StackTrace.ToString(); EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error); Server.ClearError(); //additional actions... }並在您的網路配置中添加
<customerror>部分以將使用者重定向到單獨的頁面<customErrors defaultRedirect="error.htm" mode="On"> </customErrors>
- 有用的連結