ASP.NET錯誤處理的方式

來源:互聯網
上載者:User
要建立頁中的全域處理常式,請建立 Page_Error 事件的處理常式。要建立應用程式範圍的錯誤處理程式,請在 Global.asax 檔案中將代碼添加到 Application_Error 方法。只要您的頁或應用程式中發生未處理的異常,就會調用這些方法。您可以從 HttpServerUtility.GetLastError 方法擷取有關最新錯誤的資訊。
注意 如果您具有全域錯誤處理程式,則它優先於在 Web.config customErrors 元素的 defaultRedirect 屬性中指定的錯誤處理。

原則(MSDN):在您的應用程式顯示錯誤資訊時,它不應該泄露有助於惡意使用者攻擊您系統的資訊。例如,如果您的應用程式試圖登入資料庫時沒有成功,則顯示的錯誤資訊不應該包括它正在使用的使用者名稱。

有許多方法可以控制錯誤資訊:

將應用程式配置為不向遠程(應用程式)使用者顯示詳細錯誤資訊。您也可以選擇將錯誤重新導向到應用程式頁。
只要可行就包括錯誤處理,並編寫您自己的錯誤資訊。在您的錯誤處理程式中,您可以進行測試以確定使用者是否為本機使用者並作出相應的響應。
在捕捉所有未處理異常並將它們發送到一般錯誤頁的頁層級或應用程式層級上,建立全域錯誤處理程式。這樣,即使您沒有預料到某個問題,至少使用者不會看到異常頁。

<一>頁面級的錯誤處理

void Page_Error(Object sender, EventArgs e) {
String message = "<font face=verdana color=red>"
+ "<h4>" + Request.Url.ToString() + "</h4>"
+ "<pre><font color='red'>" + Server.GetLastError().ToString() + "</pre>"
+ "</font>";

Response.Write(message);
Server.ClearError();
註:通過使用 Server 對象訪問來自伺服器的錯誤資訊。特別地,該樣本從 Request 對象擷取請求的 URL,以及 Server 對象的最新錯誤(使用 GetLastError 方法),並將這兩者都轉換為用戶端可以顯示的字串。將 message 變數寫入用戶端後,通過使用 ClearError 方法刪除該錯誤

<二>應用程式級的錯誤事件中,錯誤處理方式如下:global.asax檔案中的application_error中添加處理邏輯,可添加其它操作,如寫入windows事件記錄,發郵件給管理員,將錯誤資訊寫入資料庫。具體如下:

protected void Application_Error(Object sender, EventArgs e)
{
String Message = "\n\nURL:\n http://localhost/" + Request.Path
+ "\n\nMESSAGE:\n " + Server.GetLastError().Message
+ "\n\nSTACK TRACE:\n" + Server.GetLastError().StackTrace;
//寫入windows事件記錄
String LogName = "Application";
if (!EventLog.SourceExists(LogName))
{
EventLog.CreateEventSource(LogName, LogName);
}
EventLog Log = new EventLog();
Log.Source = LogName;
Log.WriteEntry(Message, EventLogEntryType.Error);
}
<三>web.config中,自訂錯誤資訊。將應用程式配置為不向遠端使用者顯示錯誤

<customErrors mode="RemoteOnly" defaultRedirect="AppErrors.aspx">
<error statusCode="404" redirect="NoSuchPage.aspx"/>
<error statusCode="403" redirect="NoAccessAllowed.aspx"/>
</customErrors>

註:將 mode 屬性設定為 RemoteOnly(區分大小寫)。這就將應用程式配置為僅向本機使用者(您和開發人員)顯示詳細的錯誤。
(可選)包括指嚮應用程式錯誤頁的 defaultRedirect 屬性。
(可選)包括將錯誤重新導向到特定頁的 <error> 元素。例如,您可以將標準 404 錯誤(未找到頁)重新導向到您自己的應用程式頁。

<四> 包括錯誤處理(MSDN)
1.在可能產生錯誤的任何語句前後使用 try-catch-finally 塊。
2.(可選)使用 Context 對象的 UserHostAddress 屬性對本機使用者進行測試並相應地修改錯誤處理。值 127.0.0.1 等效於“localhost”並指示瀏覽器與 Web 服務器位於同一台電腦上。
下面顯示的是一個樣本錯誤處理塊。如果發生錯誤,則用有關訊息的詳細資料載入 Session 狀態變數,然後應用程式顯示可以讀取 Session 變數並顯示錯誤的頁。(有意寫入此錯誤以便不向使用者提供任何可利用的詳細資料。)如果使用者是本機使用者,則提供不同的錯誤詳細資料。在 finally 塊中,釋放開放式資源。
try
{
sqlConnection1.Open();
sqlDataAdapter1.Fill(dsCustomers1);
}
catch (Exception ex)
{
if(HttpContext.Current.Request.UserHostAddress == "127.0.0.1")
{ Session["CurrentError"] = ex.Message; }
else
{ Session["CurrentError"] = "Error processing page."; }
Server.Transfer("ApplicationError.aspx");
}
finally
{
this.sqlConnection1.Close();
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.