`

错误时捕获和响应错误

阅读更多

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  

http错误代码含义大全详解    http://hi.baidu.com/ren_long_/blog/item/033563657a00befaf6365450.html

方法三Page_Error事件
Page_Error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。
备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心。更适当的做法是向用户显示一条消息,告知已发生错误,然后将具体的错误详细信息记录在事件日志中。
本 示例引发一个强迫错误发生在 Page_Load 事件中的空异常。按照以下步骤可创建将测试 Page_Error 事件的初始页。 1. 按照以下步骤将名为 PageEvent.aspx 的新文件添加到项目中: a. 打开 Microsoft Visual Studio .NET。
b. 在"解决方案资源管理器"中,右键单击该项目节点,指向添加,然后单击添加 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。
右键单击该页,然后单击在浏览器中查看以运行该页。请注意,将按照代码规范引发和报告错误。
备注:您可能注意到代码发出对 Server.ClearError 的调用。这将防止错误继续到要被处理的 Application_Error 事件中。

此外,您还应记下 @ Page 指令中的 Inherits 属性。如果已经设置 Inherits,则必须首先生成项目,然后再浏览到该页。如果不首先生成项目,将看到下面的错误信息: 'Project.PageEvent' is not a valid type

(转)

ASP.NET 在处理和响应错误的方式上进行了若干改进。在传统的 ASP 中,是用"On Error Resume Next"(或在 Jscript 中用 try-catch 块)处理错误的。或者,如果您运行的是 Microsoft Internet Information Services (IIS) 5.0,则使用 ASPError 对象创建自定义的错误报告页。然而,这些方法都有其局限性。

ASP.NET 提供了在运行 ASP.NET 应用程序时可能出现的错误的若干处理和响应级别。ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件、Application_Error 事件以及应用程序配置文件 (Web.config)。

本文演示如何在 ASP.NET 应用程序中使用这些新功能。尽管本文由于与 ASP.NET 直接相关而介绍了如何提供自定义错误页和一般错误报告,但是它并不介绍其他错误处理方法,如 try-catch-finally 块和公共语言运行库 (CLR) 异常系统。

 

如何使用 Page_Error 事件
Page_Error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。

备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心。更适当的做法是向用户显示一条消息,告知已发生错误,然后将具体的错误详细信息记录在事件日志中。

本示例引发一个强迫错误发生在 Page_Load 事件中的空异常。按照以下步骤可创建将测试 Page_Error 事件的初始页。 1. 按照以下步骤将名为 PageEvent.aspx 的新文件添加到项目中: a. 打开 Microsoft Visual Studio .NET。
b. 在"解决方案资源管理器"中,右键单击该项目节点,指向添加,然后单击添加 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. 右键单击该页,然后单击在浏览器中查看以运行该页。请注意,将按照代码规范引发和报告错误。
备注:您可能注意到代码发出对 Server.ClearError 的调用。这将防止错误继续到要被处理的 Application_Error 事件中。

此外,您还应记下 @ Page 指令中的 Inherits 属性。如果已经设置 Inherits,则必须首先生成项目,然后再浏览到该页。如果不首先生成项目,将看到下面的错误信息: 'Project.PageEvent' is not a valid type

如何使用 Application_Error 事件
与 Page_Error 事件相类似,您可使用 Application_Error 事件捕获发生在应用程序中的错误。由于事件发生在整个应用程序范围内,因此您可记录应用程序的错误信息或处理其他可能发生的应用程序级别的错误。

下面的示例基于前面的 Page_Error 事件代码示例,如果 Page_Load 事件中的错误未在 Page_Error 事件中捕获,将引发异常。Application_Error 事件在应用程序的 Global.asax 文件中进行指定。为简单起见,本节中的步骤创建一个要在其中引发异常的新页,捕获 Global.asax 文件的 Application_Error 事件中的错误,并将该错误写入事件日志中。下面的步骤演示如何使用 Application_Error 事件: 1. 将名为 AppEvent.aspx 的新文件添加到项目中:
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 事件中引发的错误。注意,您必须为 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. 右键单击该页,然后单击在浏览器中查看。在这种情况下该页将为空白,但是您应该注意到在事件日志中已添加了一个新项。本示例在应用程序日志中生成一个项, 可从事件查看器访问应用程序日志。在记录错误之后,您可能希望将用户重定向到另一个更用户友好的错误页或者根据需要执行一些其他操作。


如何使用 Web.config 文件
如果您不调用 Server.ClearError 或者捕获 Page_Error 或 Application_Error 事件中的错误,则将根据 Web.config 文件的 <customErrors> 部分中的设置处理错误。在 <customErrors> 部分,可将重定向页指定为默认的错误页 (defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页。您可使用此方法自定义用户收到的错误信息。

如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。本节演示如何修改 Global.asax 文件,以便从不调用 Server.ClearError。因此,错误在作为捕获错误的最后一点的 Web.config 文件中进行处理。 1. 从上一个示例中打开 Global.asax 文件。
2. 将 Server.ClearError 行注释掉,以便确保错误出现在 Web.config 文件中。
3. 将所作更改保存到 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...
}

4. 将以下代码添加到 <customErrors> 部分,以便将用户重定向到自定义页:
<customErrors defaultRedirect="errorStatus.htm" mode="On">
</customErrors>
备注:必须修改 defaultRedirect 属性中的文件路径,以便它引用相关的 Web 服务器和应用程序名称。
5. 因为在此级别捕获的错误会发送到默认的错误页,所以,必须创建一个名为 ErrorStatus.htm 的错误页。请记住,您要使用此方法来控制向用户呈现的内容,因此本示例使用 .htm 页作为错误页。将以下代码添加到 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. 若要测试该代码,请保存这些文件,生成项目,然后在浏览器中查看 AppEvent.aspx。请注意,在引发错误时,您将被重定向到 ErrorStatus.htm 页。
尽管您可在 <customErrors> 部分中 defaultRedirect 属性的值中引用默认的错误页,但是您还可根据引发的 HTTP 错误代码指定要重定向到的特定页。<error> 子元素允许使用此选项。例如:
<customErrors defaultRedirect="errorStatus.htm" mode="On">
<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
备 注:在 <customErrors> 部分的 defaultRedirect 中指定的页是一个 .htm 文件。如果您打算在 .aspx 页中使用 GetLastError (正如 Page_Error 和 Application_Error 示例那样),则在进行重定向之前,必须将异常存储在会话变量或某个其他方法中。

请注意,<customErrors> 部分包括设置为 On 的 mode 属性。mode 属性用于控制错误重定向发生的方式。例如,如果您正开发应用程序,则很可能希望查看实际的 ASP.NET 错误信息,并且不希望被重定向到更用户友好的错误页。mode 属性包括以下设置: ? On:未被处理的异常将用户重定向到指定的 defaultRedirect 页。此模式主要用于生产。
? Off:用户收到异常信息而不是被重定向到 defaultRedirect 页。此模式主要用于开发。
? RemoteOnly:只有在本地计算机上访问该站点的用户(通过使用 localhost)才能收到异常信息。所有其他用户都被重定向到 defaultRedirect 页。此模式主要用于调试。

分享到:
评论

相关推荐

    asp.net错误捕获(错误处理)page_error事件使用方法

    ASP.NET 提供了三种用于在出现错误时捕获和响应错误的主要方法:page_error事件、application_error 事件以及应用程序配置文件 (Web.config)。 这三种方法的主要作用无非是创建自定义的错误报告,创建自定义错误报告...

    错误处理_全局错误响应_TestSetting

    在测试过程中,错误和异常的处理是至关重要的,确保测试的稳定性和准确性。 错误处理机制是任何测试框架的核心组成部分,QTP也不例外。在QTP中,我们可以设定全局错误处理设置,以便在测试运行时捕获并处理预期或非...

    Go-Fail使用良好和正确的HTTP响应来管理和处理Go错误

    总之,`go-fail`库是Go语言开发Web服务时的一个有力工具,它强调了错误处理的规范性和一致性,通过将错误与HTTP响应紧密结合,提升了整体的用户体验和开发效率。在实际项目中,合理利用`go-fail`可以帮助我们编写出...

    struts2完全捕获404错误的方法

    在Struts2中,我们可以使用自定义拦截器、全局结果或配置文件来捕获和处理这种错误。 1. **自定义拦截器**: 在Struts2中,拦截器是处理请求和响应的重要组件。我们可以创建一个专门处理404错误的拦截器,当请求...

    asp.net 异常处理跳转自定义错误页面Demo

    本示例是关于如何在ASP.NET中实现异常处理,特别是如何在出现错误时跳转到自定义的404(页面未找到)和500(服务器内部错误)错误页面。下面我们将详细探讨这一主题。 首先,我们需要理解ASP.NET中的异常处理机制。...

    Release异常捕获

    总之,"Release异常捕获"是一个涵盖异常处理机制、错误记录和预防策略的综合过程,其目的是确保即使在遇到错误的情况下,程序也能以可控的方式响应,从而提高软件的可靠性。在实际开发中,我们需要对可能出现的异常...

    MVC_TIP5:JQuery_AJAX错误捕获

    **MVC_TIP5:JQuery_AJAX错误捕获** 在Web开发中,MVC(Model-View-Controller)模式是一种广泛采用的设计模式,它将应用程序分为模型、视图和控制器三个部分,以实现良好的代码组织和职责分离。在这个话题中,我们...

    基于Java的实例源码-线程错误捕获工具 CheckThread.zip

    然而,线程在运行过程中可能会遇到各种错误和异常,如死锁、竞态条件、空指针异常等,这些都需要程序员有效地捕获和处理。"CheckThread"是一个用于线程错误捕获的实用工具,它可以帮助开发者在多线程环境中监控和...

    查询mysql错误信息、及js错误信息

    3. **日志文件**:MySQL服务器会记录所有错误和警告信息到日志文件中,通常在`/var/log/mysql/error.log`(Linux)或`C:\ProgramData\MySQL\MySQL Server X.Y\Data\error.log`(Windows)。 接下来,我们转向...

    STM32 CAN错误检测

    位错误检测包括位填充错误、位错误和同步字段错误;帧错误检测则包含CRC错误、ACK错误和格式错误等。 在STM32中,CAN模块提供了丰富的错误检测功能,如位错误计数器、帧错误计数器等。当发生错误时,CAN控制器会...

    协议数据的捕获和解析

    实验二“协议数据的捕获和解析”主要目标是让学生掌握网络协议数据的捕获和分析方法,特别是对IP、ICMP、ARP和DHCP这四个关键协议的理解。实验中使用了Wireshark软件,这是一款强大的网络封包分析工具,能够捕获并...

    使HttpClient能处理错误ResponseHeader的响应信息。

    本文将深入探讨如何在遇到错误的Response Header时,使HttpClient能够正确地处理响应信息。 首先,我们需要理解Response Header在HTTP通信中的作用。它包含了服务器返回给客户端的元数据,如HTTP状态码、内容类型、...

    Object C 错误处理

    最后,文档总结了错误处理中的一些关键点,如错误域和错误代码的定义、NSError对象的创建和使用、本地化错误信息的方法、错误传播和显示的技术,以及在应用程序中实现错误响应者链和错误恢复的策略。这些内容对于...

    Android异常捕获demo(可以捕获ANR+UncaughtExceptionHandler)

    `Android异常捕获demo`主要展示了如何有效地捕获和处理两种重要的错误类型:应用程序无响应(ANR)和未捕获异常(UncaughtExceptionHandler)。下面我们将深入探讨这两个概念以及如何在实际应用中实现它们。 1. **...

    SpringBoot拦截器实现对404和500等错误的拦截

    在处理404和500错误时,我们可能在这里捕获异常并自定义错误页面。 为了处理404错误,我们需要确保SpringBoot能够正确地处理未找到的资源。默认情况下,SpringBoot将返回一个简单的404错误页面。如果你想自定义404...

    JavaScript错误与异常处理

    JavaScript中的错误分为两种主要类型:语法错误和运行错误。语法错误,也称为错误(Error),是在代码编写阶段违反了JavaScript语法规范,导致程序无法正常解析和执行。这种错误在代码编译或解释时被检测到,会使...

    QTP错误处理机制概述(中文版).pdf

    QTP 使用 VBScript 作为其脚本语言,提供了 OnError 错误处理机制来捕获和控制脚本执行过程中的错误。这包括以下三个关键概念: 1. **OnError Resume Next**:此命令允许脚本在遇到错误时继续执行,而不是停止。...

    android全局异常捕获 exception_global

    在Android开发中,全局异常捕获是一个至关重要的实践,它能确保应用在遇到未预期的错误时仍能保持稳定,并提供良好的用户体验。标题"android全局异常捕获 exception_global"和描述都指向了这个主题,表明我们将探讨...

    基于i18n国际化微服务统一处理错误码

    4. **异常处理**:使用SpringBoot的异常处理机制,如`@ExceptionHandler`注解或全局异常处理器,捕获并转换异常为带有错误码的响应。 5. **统一的错误响应格式**:设计一个统一的JSON格式来封装错误信息,包括错误...

    错误页面跳转解决办法

    查找错误处理模块,查看是否有适当的错误捕获和处理逻辑。比如在Java中,可以查看Servlet过滤器或者Controller层的异常处理。 5. **日志分析**:服务器日志(如Apache的error.log或Nginx的access.log)提供了详细的...

Global site tag (gtag.js) - Google Analytics