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事件

(转)

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 事件中。

(

(备注:您可能注意到代码发出对 Server.ClearError 的调用。这将防止错误继续到要被处理的 Application_Error 事件中。

另外,在http://blog.csdn.net/goodshot/article/details/8718563中提到:Application_Error的处理优先级高于Web.config里面配置的自定义错误处理页面,你在Application_Error里面已经把所有该做的都做了,然后还把Error给Clear掉了,此时已经不会再触发Web.config里面配置的自动跳转了! 

因此,"Page_Error"先于“Application_Error”先于“Web.config里面CustomError的配置”)

)

此外,您还应记下 @ 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自定义错误页面相关推荐

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

    ASP.NET自定义错误页面(转) ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web ...

  2. ASP.NET自定义错误页面,分离配置信息,多环境发布

    今天主要说三个内容,都是和ASP.NET有关的内容. 第一个关于自定义错误的,就是在网站出现404或者500的错误,如何给用户显示一个友好的界面. 第二个是分离配置文件web.config,如果配置信 ...

  3. ASP.NET Core中显示自定义错误页面-增强版

    之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取. 在这篇博文中改用middleware实现,并且放在独 ...

  4. [转载]针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结

    针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结 汪宇杰 2014-1-11 星期六 02:31 455 Reads 1 Comments 自定义错误页面和异常记录是个很古老的话题了, ...

  5. react 错误边界_React with GraphQL和错误边界中的自定义错误页面

    react 错误边界 by Abi Noda 通过Abi Noda React with GraphQL和错误边界中的自定义错误页面 (Custom error pages in React with ...

  6. SpringBoot自定义错误页面

    Spring Boot以一种新的微服务的方式来替代以Spring Framework构建项目的传统方式,我已经计划在后续的项目开发中使用它.它已经帮我们做了90%的工作,剩下10%的工作需要我们自己去 ...

  7. 017_SpringBoot异常处理方式-自定义错误页面

    1. 使用maven构建SpringBoot的名叫spring-boot-exception1项目 2. pom.xml <project xmlns="http://maven.ap ...

  8. ASP.NET配置错误页面浅析

    ASP.NET配置错误页面在网站的运行过程中可能会面临很多问题,例如服务器出错,用户请求的页面不存在,程序配置错误等等一系列的问题.在用户请求浏览网页碰到这些的时候会出现一些系统默认的错误页面,这样对 ...

  9. SpringBoot异常处理-自定义错误页面

    自定义错误页面 SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制. 一旦程序中出现了异常SpringBoot 会像/error 的url 发送请求. ...

最新文章

  1. JS小数位保留两位小数
  2. python 生成code128c
  3. JAVA中equals空_Java中为什么查询空字符串跟判断是否为null的时候可以不用equals?...(亲测)
  4. 64位系统使用Access 数据库文件的彻底解决方法
  5. 每日一题(易错):哪些REPEAT_INTERVAL参数能够实现每30分钟运行job
  6. 【侯捷】C++内存管理机制
  7. HTML期末大作业~ 仿新浪微博个人主页html网站模板4个页面(HTML+CSS+JavaScript)
  8. 机械优化设计c语言鲍威尔法,机械优化设计鲍威尔法.docx
  9. 小米笔记本用鸿蒙系统,小米笔记本Pro15.6GTX版评测 如果你主力用它来玩游戏显然不是明智之选...
  10. Ubuntu系统上的ImageJ安装和卸载方法
  11. LED点阵基础讲解及字符显示
  12. OpenCV入门笔记-更新篇
  13. 小红书html布局自适应,Flutter实现马蜂窝小红书自适应高度轮播图
  14. 聚宽JQData说明书
  15. qq音乐mp3解析php源码,QQ音乐API
  16. csapp之lab:shell lab
  17. 用Python教训盗号骗子
  18. 使用iterm2查看日志时屏幕持续滚动将老内容冲掉的设置
  19. 最新小旋风蜘蛛池X6.21解密版+绕过授权带教程
  20. CRM代表什么?需要CRM软件的7个理由

热门文章

  1. ubuntu修改默认系统启动项
  2. 常用的一些页面操作 js jsp check
  3. NSThread详解
  4. (转)ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 方法...
  5. 搭建VS2008下QT开发环境
  6. iPhone:创建、连接和使用静态库(过时了,仅参考)
  7. Google Maps API 进级:在信息窗口GInfoWindow中嵌入Flash动画
  8. [转] 外企面试官最爱提的问题 TOP10
  9. 基于vue2+nuxt构建的高仿饿了么(2018版)
  10. 容器编排技术 -- Kubernetes Volume