zoukankan      html  css  js  c++  java
  • .net错误处理机制(转)

    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>配置项。

  • 相关阅读:
    php内核为变量的值分配内存的几个宏
    php7 引用成为一种类型
    function参数
    execvp php-fpm reload使用的函数
    fastcgi
    php-fpm定时器
    php 类继承
    php 对象 调用静态方法
    php unset变量
    php5数组与php7数组区别
  • 原文地址:https://www.cnblogs.com/freepp/p/3711188.html
Copyright © 2011-2022 走看看