asp.net 提供了4中错误机制:Page_Error事件>ErrorPage属性>Application_Error事件> <customErrors>配置项

① Page_Error事件 (页面级)

Page_Error事件提供一种捕获在页级别出现的错误的方法。

您可以只是显示错误信息(正如下面的示例代码所示),也可以记录事件或执行某个其他操作。

private void Page_Load(object sender, System.EventArgs e)

{

  // Put user code to initialize the page here

  throw new Exception("Page Error!");

}

protected void Page_Error(object sender, EventArgs e)

{

  Exception objErr = Server.GetLastError().GetBaseException();

  Response.Write("Error:" + objErr.Message);

  Server.ClearError(); //同样要注意这句代码的使用

}

备注:此示例在浏览器中显示详细的错误信息,提供此示例只是为了进行说明。向应用程序的最终用户显示详细信息一定要小心。更适当的做法是向用户显示一条消息,告知已发生

错误,然后将具体的错误详细信息记录在日志中。

② ErrorPage属性(页面级)

你几乎可以在页面任何时候设置ErrorPage属性,从而确定页面发生错误的时候会重定向至哪个页面。要让ErrorPage属性能够发挥作用,<customErrors>配置项中的mode属性

必须设为"On"。

this.ErrorPage = "~/错误页面地址";

如果Page_Error和ErrorPage都存在,当跑出Excepition时,页面执行顺序是怎样的呢?

页面会先执行Page_Error事件处理函数,如果Page_Error()事件中调用函数Sever.Clear()清除异常信息,则不会跳转到ErrorPage属性指定的页面;如果没有调用

Server.ClearError(),Excepition信息会继续向上抛,页面会跳转到ErrorPage指定页面。这也就证明了优先级顺序:Page_Error事件>ErrorPage属性。

③ Application_Error事件

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

处理其他可能发生的应用程序级别的错误。在位于网站根目录下的Global.asax文件中添加如下代码就OK了。

protected void Application_Error(object sender, EventArgs e)
{
         Exception ex = Server.GetLastError().GetBaseException();
         //实际应用中这里可以将Exception信息记Log或是保存到数据库中
  
         //还可以将错误发邮件给网站维护人员
  
          Response.Write("Error:" + ex.Message);
         //清除Exception,避免继续传递给上一级处理
 
         //这里上级就是<CustomerErrors>配置节了
          Server.ClearError(); 
}

④ <customErrors>配置项
配置文件web.config中的<customErrors> 配置节,可将重定向页指定为默认的错误页defaultRedirect或者根据引发的 HTTP 错误代码指定特定页。如果发生在应用程序以前的

任一级别都未捕获到的错误,则显示这个自定义页。
<customErrors mode="On" defaultRedirect="~/ErrorHandling/ApplicationError.html"> <error statusCode="404" redirect="~/ErrorHandling/404.html" />

</customErrors>

同样,如果Application_Error和<customerErrors>同时存在,也存在执行顺序的问题。因为优先级Application_Error事件> <customErrors>配置项,所以发生应用程序级错

误时,优先执行Application_Error事件中的代码,如果Application_Error事件中调用了Server.ClearError()函数,<customerErrors>配置节中的defaultRedirect不起作用,

因为Exception已经被清除;如果Application_Error事件中没用调用了Server.ClearError()函数,错误页会重新定位到defaultRedict指定的URL页面,为用户显示友好出错信

息。
 通过对.NET提供的以上四种错误处理机制的分析,我们可以把它们从不同的角度分类,便于我们理解和使用。
 1.从功能上分类:用于异常处理(Handling exceptions)是Page_Error事件和Application_Error事件;用户错误页面重定向(Redirecting the user to an error page)的

是 ErrorPage属性 和 <customErrors>配置项。
 2.从错误处理的范围分类:用于页面级(Page level)错误处理的是Page_Error事件 和 ErrorPage属性;用于应用程序级(Application level)错误处理的是

Application_Error事件 和 <customErrors>配置项。

.net错误处理机制(转)的更多相关文章

  1. linux系统编程之错误处理机制

    在讲解liunx错误处理机制之前我们先来看一段代码: #include<sys/types.h> #include<sys/stat.h> #include<fcntl. ...

  2. javascript中的错误处理机制

    × 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...

  3. Map/Reduce 工作机制分析 --- 错误处理机制

    前言 对于Hadoop集群来说,节点损坏是非常常见的现象. 而Hadoop一个很大的特点就是某个节点的损坏,不会影响到整个分布式任务的运行. 下面就来分析Hadoop平台是如何做到的. 硬件故障 硬件 ...

  4. Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制

    本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...

  5. PHP异常与错误处理机制

    先区别一下php中错误 与 异常的概念吧 PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况.平时遇到的warming.notice ...

  6. ASP.NET的错误处理机制之一(概念)

    对Web应用程序来说,发生不可预知的错误和异常在所难免,我们必须为Web程序提供错误处理机制.当错误发生时,我们必须做好两件事情:一是将错误信息记录日志,发邮件通知网站维护人员,方便技术人员对错误进行 ...

  7. ASP.NET的错误处理机制

    对于一个Web应用程序来说,出错是在所难免的,因此我们应该未雨绸缪,为可能出现的错误提供恰当的处理.事实上,良好的错误处理机制正是衡量Web应用程序好坏的一个重要标准.试想一下,当用户不小心在浏览器输 ...

  8. hadoop 错误处理机制

    hadoop 错误处理机制 1.硬件故障 硬件故障是指jobtracker故障或TaskTracker 故障 jobtracker是单点,若发生故障,目前hadoop 还无法处理,唯有选择最牢靠的硬件 ...

  9. PHP中的错误处理机制

    常见的三种错误: 1.Notice :通知性错误,最小的错误,当发生通知性错误时,会弹出一个提示信息.不会中断代码的执行. 错误代码: #例如Notice: 2.Warning:警告性错误,当发生警告 ...

随机推荐

  1. 94 Binary Tree Inorder Traversal(二叉树中序遍历Medium)

    题目意思:二叉树中序遍历,结果存在vector<int>中 解题思路:迭代 迭代实现: /** * Definition for a binary tree node. * struct ...

  2. python二进制文件解析

    struct.pack(): struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组).其函数原型 ...

  3. django group_by

    from django.db.models import Count Members.objects.values('designation').annotate(dcount=Count('desi ...

  4. HDU 2955(01背包问题)

    M - 01背包 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Descript ...

  5. soket客户端程序(一)

    soket客户端主要完成以下步骤: 1.建立soket套接字(将套接字理解为一个通道) 2.建立连接 3.向服务器发送http请求 4.接收得到的数据 5.关闭连接 6.本地处理得到的数据 http: ...

  6. ubuntu下MySQL安装配置及基本操作

    在linux下安装方法: 分为四种:一: 直接用软件仓库自动安装(如:ubuntu下,sudo apt-get install mysql-server; Debain下用yum安装): 二:官网下载 ...

  7. How to solve “sudo: /etc/sudoers.d is world writable”

    Run pkexec chmod 0440 /etc/sudoers

  8. 海园帮忙写的JQUERY功能,实现了我们想要的,我觉得有点屌哟~~

    需求就是为了可以在WEB在线更新代码期间,如果执行时间较长的话, 就在提交按钮之后,按钮变为灰色. 同时,一个DIV里每隔两秒刷新输出. 当更新完成之后(检测文档中的关键字串),按钮变为可提交状态~~ ...

  9. COJ 0986 WZJ的数据结构(负十四) 区间动态k大

    题解:哈哈哈我过了!!!主席树+树状数组写起来还真是hentai啊... 在这里必须分享我的一个沙茶错!!!看这段代码: void get(int x,int d){ ]=root[x];x;x-=x ...

  10. 【二分】Codeforces 706B Interesting drink

    题目链接: http://codeforces.com/problemset/problem/706/B 题目大意: n (1 ≤ n ≤ 100 000)个商店卖一个东西,每个商店的价格Ai,你有m ...