日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET自定义错误页面(转)

發(fā)布時(shí)間:2025/5/22 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET自定义错误页面(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

ASP.NET自定義錯(cuò)誤頁面(轉(zhuǎn))

?

ASP.NET 提供三種用于在出現(xiàn)錯(cuò)誤時(shí)捕獲和響應(yīng)錯(cuò)誤的主要方法:Page_Error 事件、Application_Error 事件以及應(yīng)用程序配置文件 (Web.config)。

如果您不調(diào)用 Server.ClearError 或者捕獲 Page_Error 或 Application_Error 事件中的錯(cuò)誤,則將根據(jù) Web.config 文件的 <customErrors> 部分中的設(shè)置處理錯(cuò)誤。在 <customErrors> 部分,可將重定向頁指定為默認(rèn)的錯(cuò)誤頁 (defaultRedirect) 或者根據(jù)引發(fā)的 HTTP 錯(cuò)誤代碼指定特定頁。您可使用此方法自定義用戶收到的錯(cuò)誤信息。
盡管您可在 <customErrors> 部分中 defaultRedirect 屬性的值中引用默認(rèn)的錯(cuò)誤頁,但是您還可根據(jù)引發(fā)的 HTTP 錯(cuò)誤代碼指定要重定向到的特定頁。<error> 子元素允許使用此選項(xiàng)
<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自定義錯(cuò)誤處理頁面方法一

1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"

defaultRedirect="ApplicationErroy.aspx" >< /customErrors>節(jié)點(diǎn),

2、添加錯(cuò)誤處理頁面:ApplicationErroy.aspx調(diào)用下面的方法:
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>");
????? }????
?

這種方法不能完整地顯示錯(cuò)誤信息;

asp.net自定義錯(cuò)誤處理頁面方法二

1、添加Web.config, < system.web>< /system.web>中添加< customErrors mode="On"

defaultRedirect="ApplicationErroy.aspx" >< /customErrors>節(jié)點(diǎn),

2、添加Global.asax文件,找到Application_Error事件,加入以下代碼:???

//這是添加了一個(gè)全局應(yīng)用程序類 在Application_Error事件中處理錯(cuò)誤頁面 和web.config沒有關(guān)系 即使沒有web.config 也是可以定位到錯(cuò)誤頁面

??? void Application_Error(object sender, EventArgs e)

??? {

??????? //在出現(xiàn)未處理的錯(cuò)誤時(shí)運(yùn)行的代碼

??????? Exception erroy = Server.GetLastError();????

???????? string err = "出錯(cuò)頁面是:" + Request.Url.ToString() + "</br>";????

???????? err += "異常信息:" + erroy.Message + "</br>";???

???????? err += "Source:" + erroy.Source + "</br>";????

???????? err += "StackTrace:" + erroy.StackTrace + "</br>";????

??????? //清除前一個(gè)異常

??????? Server.ClearError();

???????????

???????? //此處理用Session["ProError"]出錯(cuò)。所以用 Application["ProError"]

???????? Application["erroy"] = err;

???????? //此處不是page中,不能用Response.Redirect("../frmSysError.aspx");

???????? System.Web.HttpContext.Current.Response.Redirect(HttpContext.Current.Request.ApplicationPath + "/ApplicationErroy.aspx");

??????

}

2、添加錯(cuò)誤處理頁面:ApplicationErroy.aspx 加入以下代碼;

protected void Page_Load(object sender, EventArgs e)

??? {

??????? //顯示程序中的錯(cuò)誤碼

??????? if (!IsPostBack)

??????? {

??????????? //顯示程序中的錯(cuò)誤碼

??????????? if (Application["erroy"] != null)

??????????? {

??????????????? Response.Write(Application["erroy"].ToString());

??????????? }

??????? }

??? }

這種方法能完整地顯示錯(cuò)誤信息,

最好的辦法還是兩種方法一起用最好!

另: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>

?

添加進(jìn)去

http錯(cuò)誤代碼含義:?

"403"??? :??? Forbidden???
"404"??? :??? Not Found
"500"??? :??? Internal Server Error?

http錯(cuò)誤代碼含義大全詳解?? http://hi.baidu.com/ren_long_/blog/item/033563657a00befaf6365450.html

方法三Page_Error事件
Page_Error 事件提供一種捕獲在頁級別出現(xiàn)的錯(cuò)誤的方法。您可以只是顯示錯(cuò)誤信息(正如下面的示例代碼所示),也可以記錄事件或執(zhí)行某個(gè)其他操作。
備注:此示例在瀏覽器中顯示詳細(xì)的錯(cuò)誤信息,提供此示例只是為了進(jìn)行說明。向應(yīng)用程序的最終用戶顯示詳細(xì)信息(尤其是該應(yīng)用程序在 Internet 上運(yùn)行時(shí))一定要小心。更適當(dāng)?shù)淖龇ㄊ窍蛴脩麸@示一條消息,告知已發(fā)生錯(cuò)誤,然后將具體的錯(cuò)誤詳細(xì)信息記錄在事件日志中。
本示例引發(fā)一個(gè)強(qiáng)迫錯(cuò)誤發(fā)生在 Page_Load 事件中的空異常。按照以下步驟可創(chuàng)建將測試 Page_Error 事件的初始頁。 1. 按照以下步驟將名為 PageEvent.aspx 的新文件添加到項(xiàng)目中: a. 打開 Microsoft Visual Studio .NET。
b. 在"解決方案資源管理器"中,右鍵單擊該項(xiàng)目節(jié)點(diǎn),指向添加,然后單擊添加 Web 窗體。
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。
右鍵單擊該頁,然后單擊在瀏覽器中查看以運(yùn)行該頁。請注意,將按照代碼規(guī)范引發(fā)和報(bào)告錯(cuò)誤。
備注:您可能注意到代碼發(fā)出對 Server.ClearError 的調(diào)用。這將防止錯(cuò)誤繼續(xù)到要被處理的 Application_Error 事件中。

此外,您還應(yīng)記下 @ Page 指令中的 Inherits 屬性。如果已經(jīng)設(shè)置 Inherits,則必須首先生成項(xiàng)目,然后再瀏覽到該頁。如果不首先生成項(xiàng)目,將看到下面的錯(cuò)誤信息: 'Project.PageEvent' is not a valid type

(轉(zhuǎn))

ASP.NET 在處理和響應(yīng)錯(cuò)誤的方式上進(jìn)行了若干改進(jìn)。在傳統(tǒng)的 ASP 中,是用"On Error Resume Next"(或在 Jscript 中用 try-catch 塊)處理錯(cuò)誤的。或者,如果您運(yùn)行的是 Microsoft Internet Information Services (IIS) 5.0,則使用 ASPError 對象創(chuàng)建自定義的錯(cuò)誤報(bào)告頁。然而,這些方法都有其局限性。

ASP.NET 提供了在運(yùn)行 ASP.NET 應(yīng)用程序時(shí)可能出現(xiàn)的錯(cuò)誤的若干處理和響應(yīng)級別。ASP.NET 提供三種用于在出現(xiàn)錯(cuò)誤時(shí)捕獲和響應(yīng)錯(cuò)誤的主要方法:Page_Error 事件、Application_Error 事件以及應(yīng)用程序配置文件 (Web.config)。

本文演示如何在 ASP.NET 應(yīng)用程序中使用這些新功能。盡管本文由于與 ASP.NET 直接相關(guān)而介紹了如何提供自定義錯(cuò)誤頁和一般錯(cuò)誤報(bào)告,但是它并不介紹其他錯(cuò)誤處理方法,如 try-catch-finally 塊和公共語言運(yùn)行庫 (CLR) 異常系統(tǒng)。

如何使用 Page_Error 事件
Page_Error 事件提供一種捕獲在頁級別出現(xiàn)的錯(cuò)誤的方法。您可以只是顯示錯(cuò)誤信息(正如下面的示例代碼所示),也可以記錄事件或執(zhí)行某個(gè)其他操作。

備注:此示例在瀏覽器中顯示詳細(xì)的錯(cuò)誤信息,提供此示例只是為了進(jìn)行說明。向應(yīng)用程序的最終用戶顯示詳細(xì)信息(尤其是該應(yīng)用程序在 Internet 上運(yùn)行時(shí))一定要小心。更適當(dāng)?shù)淖龇ㄊ窍蛴脩麸@示一條消息,告知已發(fā)生錯(cuò)誤,然后將具體的錯(cuò)誤詳細(xì)信息記錄在事件日志中。

本示例引發(fā)一個(gè)強(qiáng)迫錯(cuò)誤發(fā)生在 Page_Load 事件中的空異常。按照以下步驟可創(chuàng)建將測試 Page_Error 事件的初始頁。 1. 按照以下步驟將名為 PageEvent.aspx 的新文件添加到項(xiàng)目中: a. 打開 Microsoft Visual Studio .NET。
b. 在"解決方案資源管理器"中,右鍵單擊該項(xiàng)目節(jié)點(diǎn),指向添加,然后單擊添加 Web 窗體。
c. 在名稱文本框中,鍵入 PageEvent.aspx,然后單擊打開。

2. 將以下代碼添加到 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>

3. 從文件菜單中,單擊保存 PageEvent.aspx。
4. 右鍵單擊該頁,然后單擊在瀏覽器中查看以運(yùn)行該頁。請注意,將按照代碼規(guī)范引發(fā)和報(bào)告錯(cuò)誤。
備注:您可能注意到代碼發(fā)出對 Server.ClearError 的調(diào)用。這將防止錯(cuò)誤繼續(xù)到要被處理的 Application_Error 事件中。

此外,您還應(yīng)記下 @ Page 指令中的 Inherits 屬性。如果已經(jīng)設(shè)置 Inherits,則必須首先生成項(xiàng)目,然后再瀏覽到該頁。如果不首先生成項(xiàng)目,將看到下面的錯(cuò)誤信息: 'Project.PageEvent' is not a valid type

如何使用 Application_Error 事件
與 Page_Error 事件相類似,您可使用 Application_Error 事件捕獲發(fā)生在應(yīng)用程序中的錯(cuò)誤。由于事件發(fā)生在整個(gè)應(yīng)用程序范圍內(nèi),因此您可記錄應(yīng)用程序的錯(cuò)誤信息或處理其他可能發(fā)生的應(yīng)用程序級別的錯(cuò)誤。

下面的示例基于前面的 Page_Error 事件代碼示例,如果 Page_Load 事件中的錯(cuò)誤未在 Page_Error 事件中捕獲,將引發(fā)異常。Application_Error 事件在應(yīng)用程序的 Global.asax 文件中進(jìn)行指定。為簡單起見,本節(jié)中的步驟創(chuàng)建一個(gè)要在其中引發(fā)異常的新頁,捕獲 Global.asax 文件的 Application_Error 事件中的錯(cuò)誤,并將該錯(cuò)誤寫入事件日志中。下面的步驟演示如何使用 Application_Error 事件: 1. 將名為 AppEvent.aspx 的新文件添加到項(xiàng)目中:
2. 將以下代碼添加到 AppEvent.aspx 中:
<script language=C# runat="server">
void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}
</script>

3. 從文件菜單中,單擊保存 AppEvent.aspx。
4. 將 Application_Error 事件添加到 Global.asax 文件中以捕獲在 AppEvent.aspx 頁的 Page_Load 事件中引發(fā)的錯(cuò)誤。注意,您必須為 System.Diagnostics 名稱空間將另一條 using 語句添加到 Global.asax,才能使用事件日志。

將以下代碼添加到 Global.asax 文件中:
using System.Diagnostics;

protected void Application_Error(object sender, EventArgs e)
{
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...
}

5. 保存 Global.asax 文件。
6. 在 Visual Studio .NET 中,在生成菜單上,單擊生成。
7. 右鍵單擊該頁,然后單擊在瀏覽器中查看。在這種情況下該頁將為空白,但是您應(yīng)該注意到在事件日志中已添加了一個(gè)新項(xiàng)。本示例在應(yīng)用程序日志中生成一個(gè)項(xiàng), 可從事件查看器訪問應(yīng)用程序日志。在記錄錯(cuò)誤之后,您可能希望將用戶重定向到另一個(gè)更用戶友好的錯(cuò)誤頁或者根據(jù)需要執(zhí)行一些其他操作。


如何使用 Web.config 文件
如果您不調(diào)用 Server.ClearError 或者捕獲 Page_Error 或 Application_Error 事件中的錯(cuò)誤,則將根據(jù) Web.config 文件的 <customErrors> 部分中的設(shè)置處理錯(cuò)誤。在 <customErrors> 部分,可將重定向頁指定為默認(rèn)的錯(cuò)誤頁 (defaultRedirect) 或者根據(jù)引發(fā)的 HTTP 錯(cuò)誤代碼指定特定頁。您可使用此方法自定義用戶收到的錯(cuò)誤信息。

如果發(fā)生在應(yīng)用程序以前的任一級別都未捕獲到的錯(cuò)誤,則顯示這個(gè)自定義頁。本節(jié)演示如何修改 Global.asax 文件,以便從不調(diào)用 Server.ClearError。因此,錯(cuò)誤在作為捕獲錯(cuò)誤的最后一點(diǎn)的 Web.config 文件中進(jìn)行處理。 1. 從上一個(gè)示例中打開 Global.asax 文件。
2. 將 Server.ClearError 行注釋掉,以便確保錯(cuò)誤出現(xiàn)在 Web.config 文件中。
3. 將所作更改保存到 Global.asax 中。代碼看起來應(yīng)類似如下形式:
using System.Diagnostics;

protected void Application_Error(object sender, EventArgs e)
{
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...
}

4. 將以下代碼添加到 <customErrors> 部分,以便將用戶重定向到自定義頁:
<customErrors defaultRedirect="errorStatus.htm" mode="On">
</customErrors>
備注:必須修改 defaultRedirect 屬性中的文件路徑,以便它引用相關(guān)的 Web 服務(wù)器和應(yīng)用程序名稱。
5. 因?yàn)樵诖思墑e捕獲的錯(cuò)誤會發(fā)送到默認(rèn)的錯(cuò)誤頁,所以,必須創(chuàng)建一個(gè)名為 ErrorStatus.htm 的錯(cuò)誤頁。請記住,您要使用此方法來控制向用戶呈現(xiàn)的內(nèi)容,因此本示例使用 .htm 頁作為錯(cuò)誤頁。將以下代碼添加到 ErrorStatus.htm 中:
<HTML>
<HEAD>
<TITLE></TITLE>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
</HEAD>
<BODY>
<b>Custom Error page!</b>
<br>
You have been redirected here from the &lt;customErrors&gt; section of the
Web.config file.
</BODY>
</HTML>

6. 若要測試該代碼,請保存這些文件,生成項(xiàng)目,然后在瀏覽器中查看 AppEvent.aspx。請注意,在引發(fā)錯(cuò)誤時(shí),您將被重定向到 ErrorStatus.htm 頁。
盡管您可在 <customErrors> 部分中 defaultRedirect 屬性的值中引用默認(rèn)的錯(cuò)誤頁,但是您還可根據(jù)引發(fā)的 HTTP 錯(cuò)誤代碼指定要重定向到的特定頁。<error> 子元素允許使用此選項(xiàng)。例如:
<customErrors defaultRedirect="errorStatus.htm" mode="On">
<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
備 注:在 <customErrors> 部分的 defaultRedirect 中指定的頁是一個(gè) .htm 文件。如果您打算在 .aspx 頁中使用 GetLastError (正如 Page_Error 和 Application_Error 示例那樣),則在進(jìn)行重定向之前,必須將異常存儲在會話變量或某個(gè)其他方法中。

請注意,<customErrors> 部分包括設(shè)置為 On 的 mode 屬性。mode 屬性用于控制錯(cuò)誤重定向發(fā)生的方式。例如,如果您正開發(fā)應(yīng)用程序,則很可能希望查看實(shí)際的 ASP.NET 錯(cuò)誤信息,并且不希望被重定向到更用戶友好的錯(cuò)誤頁。mode 屬性包括以下設(shè)置: ? On:未被處理的異常將用戶重定向到指定的 defaultRedirect 頁。此模式主要用于生產(chǎn)。
? Off:用戶收到異常信息而不是被重定向到 defaultRedirect 頁。此模式主要用于開發(fā)。
? RemoteOnly:只有在本地計(jì)算機(jī)上訪問該站點(diǎn)的用戶(通過使用 localhost)才能收到異常信息。所有其他用戶都被重定向到 defaultRedirect 頁。此模式主要用于調(diào)試。
?


出處:http://blog.csdn.net/tuwen/archive/2009/11/26/4879052.aspx

轉(zhuǎn)載于:https://www.cnblogs.com/sgivee/archive/2010/08/26/1808917.html

總結(jié)

以上是生活随笔為你收集整理的ASP.NET自定义错误页面(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。