asp.net自訂錯誤處理頁面的幾種方法

來源:互聯網
上載者:User

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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.