ASP.NET 提供三種用於在出現錯誤時捕獲和響應錯誤的主要方法:Page_Error 事件、Application_Error 事件以及應用程式設定檔 (Web.config)。
如果您不調用 Server.ClearError 或者捕獲 Page_Error 或 Application_Error 事件中的錯誤,則將根據 Web.config 檔案的 <customErrors> 部分中的設定處理錯誤。在 <customErrors> 部分,可將重新導向頁指定為預設的錯誤頁 (defaultRedirect) 或者根據引發的 HTTP 錯誤碼指定特定頁。您可使用此方法自訂使用者收到的錯誤資訊。
儘管您可在 <customErrors> 部分中 defaultRedirect 屬性的值中引用預設的錯誤頁,但是您還可根據引發的 HTTP 錯誤碼指定要重新導向到的特定頁。<error> 子項目允許使用此選項
<customErrors mode="On" defaultRedirect="ApplicationErroy.aspx">
<error statusCode="403" redirect="403.htm"/>
<error statusCode="404" redirect="404.htm"/>
<error statusCode="500" redirect="500.htm"/>
</customErrors>
asp.net自訂錯誤處理頁面方法一
1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"
defaultRedirect="ApplicationErroy.aspx" >< /customErrors>節點,
2、添加錯誤處理頁面:ApplicationErroy.aspx調用下面的方法:
private void DealErroy()
{
HttpException erroy = new HttpException();
string strCode = erroy.ErrorCode.ToString();
string strMsg = erroy.Message;
erroy.HelpLink = "sss";
Response.Write("ErrorCode:" + strCode + "< br>");
Response.Write("Message:" + strMsg + "< br>");
Response.Write("HelpLink:" + erroy.HelpLink + "< br>");
Response.Write("Source:" + erroy.Source + "< br>");
Response.Write("TargetSite:" + erroy.TargetSite + "< br>");
Response.Write("InnerException:" + erroy.InnerException + "< br>");
Response.Write("StackTrace:" + erroy.StackTrace + "< br>");
Response.Write("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "< br>");
Response.Write("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "< br>");
Response.Write("erroy.Data.ToString()::" + erroy.Data.ToString() + "< br>");
}
private void DealErroy()
{
HttpException erroy = new HttpException();
string strCode = erroy.ErrorCode.ToString();
string strMsg = erroy.Message;
erroy.HelpLink = "sss";
Response.Write("ErrorCode:" + strCode + "< br>");
Response.Write("Message:" + strMsg + "< br>");
Response.Write("HelpLink:" + erroy.HelpLink + "< br>");
Response.Write("Source:" + erroy.Source + "< br>");
Response.Write("TargetSite:" + erroy.TargetSite + "< br>");
Response.Write("InnerException:" + erroy.InnerException + "< br>");
Response.Write("StackTrace:" + erroy.StackTrace + "< br>");
Response.Write("GetHtmlErrorMessage:" + erroy.GetHtmlErrorMessage() + "< br>");
Response.Write("erroy.GetHttpCode().ToString():" + erroy.GetHttpCode().ToString() + "< br>");
Response.Write("erroy.Data.ToString()::" + erroy.Data.ToString() + "< br>");
}
這種方法不能完整地顯示錯誤資訊;
asp.net自訂錯誤處理頁面方法二
1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"
defaultRedirect="ApplicationErroy.aspx" >< /customErrors>節點,
2、添加Global.asax檔案,找到Application_Error事件,加入以下代碼:
//這是添加了一個全域應用程式類 在Application_Error事件中處理錯誤頁面 和web.config沒有關係 即使沒有web.config 也是可以定位到錯誤頁面
void Application_Error(object sender, EventArgs e)
{
//在出現未處理的錯誤時啟動並執行代碼
Exception erroy = Server.GetLastError();
string err = "出錯頁面是:" + Request.Url.ToString() + "</br>";
err += "異常資訊:" + erroy.Message + "</br>";
err += "Source:" + erroy.Source + "</br>";
err += "StackTrace:" + erroy.StackTrace + "</br>";
//清除前一個異常
Server.ClearError();
//此處理用Session["ProError"]出錯。所以用 Application["ProError"]
Application["erroy"] = err;
//此處不是page中,不能用Response.Redirect("../frmSysError.aspx");
System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath + "/ApplicationErroy.aspx");
}
2、添加錯誤處理頁面:ApplicationErroy.aspx 加入以下代碼;
protected void Page_Load(object sender, EventArgs e)
{
//顯示程式中的錯誤碼
if (!IsPostBack)
{
//顯示程式中的錯誤碼
if (Application["erroy"] != null)
{
Response.Write(Application["erroy"].ToString());
}
}
}
這種方法能完整地顯示錯誤資訊,
最好的辦法還是兩種方法一起用最好!
另:web.config中也可以把
<customErrors mode="On" defaultRedirect="ApplicationErroy.aspx">
<error statusCode="403" redirect="403.htm"/>
<error statusCode="404" redirect="404.htm"/>
<error statusCode="500" redirect="500.htm"/>
</customErrors>
添加進去
http錯誤碼含義:
"403" : Forbidden
"404" : Not Found
"500" : Internal Server Error
方法三Page_Error事件
Page_Error 事件提供一種捕獲在頁層級出現的錯誤的方法。您可以只是顯示錯誤資訊(正如下面的範例程式碼所示),也可以記錄事件或執行某個其他動作。
備忘:此樣本在瀏覽器中顯示詳細的錯誤資訊,提供此樣本只是為了進行說明。嚮應用程式的終端使用者顯示詳細資料(尤其是該應用程式在 Internet 上運行時)一定要小心。更適當的做法是向使用者顯示一條訊息,告知已發生錯誤,然後將具體的錯誤詳細資料記錄在事件記錄中。
本樣本引發一個強迫錯誤發生在 Page_Load 事件中的空異常。按照以下步驟可建立將測試 Page_Error 事件的初始頁。 1. 按照以下步驟將名為 PageEvent.aspx 的新檔案添加到項目中: a. 開啟 Microsoft Visual Studio .NET。
b. 在"方案總管"中,按右鍵該項目節點,指向添加,然後單擊添加 Web Form。
c. 在名稱文字框中,鍵入 PageEvent.aspx,然後單擊開啟。
將以下代碼添加到 PageEvent.aspx 中:
<script language=C# runat="server">
void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}
public void Page_Error(object sender,EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "<b>Error Caught in Page_Error event</b><hr><br>" +
"<br><b>Error in:</b>" + Request.Url.ToString() +
"<br><b>Error Message:</b>" + objErr.Message.ToString()+
"<br><b>Stack Trace:</b><br>" +
objErr.StackTrace.ToString();
Response.Write(err.ToString());
Server.ClearError();
}
</script>
從檔案菜單中,單擊儲存 PageEvent.aspx。
按右鍵該頁,然後單擊在瀏覽器中查看以運行該頁。請注意,將按照代碼規範引發和報告錯誤。
備忘:您可能注意到代碼發出對 Server.ClearError 的調用。這將防止錯誤繼續到要被處理的 Application_Error 事件中。
此外,您還應記下 @ Page 指令中的 Inherits 屬性。如果已經設定 Inherits,則必須首先產生項目,然後再瀏覽到該頁。如果不首先產生項目,將看到下面的錯誤資訊: 'Project.PageEvent' is not a valid type