`
yfdong21
  • 浏览: 62089 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ASP.NET 错误页处理

阅读更多

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 异常处理跳转自定义错误页面Demo

    在ASP.NET开发中,异常处理是一项至关重要的任务,它确保了应用程序在遇到错误时能够优雅地处理并提供用户友好的反馈。本示例是关于如何在ASP.NET中实现异常处理,特别是如何在出现错误时跳转到自定义的404(页面未...

    web错误统一处理 ASP.NET的错误处理机制

    5. **ELMAH(Error Logging Modules and Handlers)**:这是一款开源的ASP.NET错误日志记录组件,它可以自动捕获、记录和显示ASP.NET应用程序的未处理异常。ELMAH不仅记录错误,还提供了一个Web界面供开发者查看和...

    【ASP.NET编程知识】ASP.NET MVC自定义错误页面真的简单吗.docx

    因为 ASP.NET MVC 的管道处理和 IIS 的处理方式不同,导致自定义错误页面的实现变得复杂。 例如,在 ASP.NET MVC 中,自定义 404 错误页面需要在 web.config 文件中添加 `&lt;customErrors&gt;` 配置节,并在错误页面中...

    asp.net如何使用错误提醒控件

    错误提醒控件是ASP.NET中的一种可视化组件,它能够以用户友好的方式显示错误信息,而不是默认的ASP.NET错误页。一种常见的错误提醒控件是`ValidationSummary`控件。`ValidationSummary`用于显示验证失败时的所有验证...

    asp.net错误页面处理示例分享

    1.新建Golbal.asax ... string error = “发生异常页: ” + Request.Url.ToString() + “ ”; error += “异常信息: ” + objErr.Message + “ ”; Server.ClearError(); Application[“error”] =

    ASP.NET错误机制的处理附源码

    ASP.NET错误机制是微软开发的Web应用程序框架ASP.NET中的一个重要组成部分,它允许开发者优雅地处理可能出现的异常和错误,提供了一种系统化的方式来捕获、记录和响应运行时的错误。错误处理对于任何Web应用程序都是...

    ASP.NET写的轮播图代码页面

    2. **JavaScript和jQuery**:虽然ASP.NET提供了服务器端处理,但为了实现客户端交互(如鼠标悬停、点击切换等),通常会结合JavaScript和jQuery。jQuery库简化了DOM操作,提供动画效果和事件处理,是实现轮播图动画...

    ASP.NET常见错误及解决方案

    本文将深入探讨一些常见的ASP.NET错误及其解决方案。 1. **编译错误**:当代码中存在语法错误或类型匹配错误时,ASP.NET在编译期间会抛出错误。解决方法通常是检查代码的拼写、括号匹配、变量声明以及方法调用等,...

    asp.net 导出 pdf 文件

    在 ASP.NET 中处理 PDF,通常有以下几种方法: 1. **iTextSharp**:这是一个流行的开源库,可以用于创建、编辑和读取 PDF 文件。使用 iTextSharp,我们可以创建一个新的 PDF 文档,添加文本、图像、表格等元素,...

    asp.net 实例源码

    ASP.NET 是微软公司开发的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,简化了Web应用的开发过程。这个实例源码可能是为了展示如何使用ASP.NET来开发一个在线考试系统,...

    ASP.NET文件参考 asp.net asp.net技巧

    ASP.NET的安全特性包括身份验证、授权和错误处理。Forms Authentication用于用户登录验证,角色基础的授权可以控制用户对特定资源的访问。异常处理机制确保程序在遇到错误时能提供有用的信息,同时保护应用程序不被...

    asp.net网站模板

    这些页面展示了如何在ASP.NET中处理数据的添加、编辑和删除操作,通常与数据库交互,使用ADO.NET或Entity Framework等技术。 在学习这个模板时,初学者可以深入了解ASP.NET的页面生命周期、控件模型、数据绑定以及...

    ASP.NET教程 ASP.NET教程

    2. **控件事件模型**:ASP.NET提供了丰富的服务器控件,每个控件都有自己的事件,通过事件处理程序可以实现用户交互逻辑。 3. **视图状态**(ViewState):用于在客户端和服务器之间持久化页面状态,但可能会增加...

    ASP.NET中错误处理代码优化--vs2003

    "ASP.NET中错误处理代码优化--vs2003"这个主题主要关注如何在ASP.NET环境中,特别是在Visual Studio 2003下,对错误处理代码进行优化,提高应用的健壮性。 1. 错误处理的重要性:错误处理是程序开发的关键环节,...

    使用ASP.NET技术开发网上书店(ASP.NET)

    ASP.NET提供了强大的错误处理机制,包括Global.asax文件中的错误处理,以及Visual Studio的调试工具,帮助开发者快速定位和修复问题。 10. **部署和性能优化**: 最后,了解IIS服务器配置、发布和部署流程,以及...

    asp.net 后台管理系统界面

    综上所述,"asp.net 后台管理系统界面"涉及了 ASP.NET 的多个方面,从框架选择到界面设计,再到数据处理和安全控制,每个环节都需要精心设计和实现。开发者可以根据项目需求和团队技能选择合适的技术栈,构建出高效...

    asp.net大作业

    【ASP.NET大作业】是一个基于ASP.NET技术完成的项目,主要展示了如何利用.NET框架和ASP.NET Web应用程序开发平台来构建一个高效、用户友好的Web应用。这个大作业可能包括了数据库交互、文档管理等多个功能模块,旨在...

    ASP.NET 完全入门书籍

    ASP.NET 是微软公司开发的一种用于构建动态网站、Web应用程序和Web服务的技术框架。它基于.NET Framework,提供了一种高效、安全、可扩展的环境来创建Web内容。ASP.NET完全入门书籍是针对初学者设计的,旨在帮助他们...

    ASP.NET操作echarts

    接下来,我们用 C# 编写 ASP.NET 后台代码来处理数据。在 ASP.NET 中,可以创建一个 Web API 控制器或者使用 MVC 模式来提供数据接口。例如,一个简单的返回 JSON 数据的控制器方法可能如下: ```csharp [HttpGet] ...

    asp.net宝典/asp.net

    9. **部署与优化**:了解如何将ASP.NET应用程序部署到IIS服务器,以及如何进行性能优化,包括缓存策略、调试和错误处理技巧。 10. **源码分析**:通过书中提供的源码,可以深入学习实际项目的实现细节,提升实际...

Global site tag (gtag.js) - Google Analytics