Asp.net

ASP.NET Webforms 中的異常處理

  • April 7, 2022

在 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>
  • 有用的連結

MSDN

MSDN

異常記錄 - Peter Bromberg

引用自:https://stackoverflow.com/questions/558314