zhixin's profileMYspace.comPhotosBlogLists Tools Help

Blog


    October 23

    ASP.NET的错误处理机制

    1.Page_Error事件 

    2.ErrorPage属性 

    3.Application_Error事件

          与Page_Error 事件相类似,您可使用Application_Error事件捕获发生在应用程序中的错误。由于事件发生在整个应用程序范围内,因此您可记录应用程序的错误信息或处理其他可能发生的应用程序级别的错误。在Global.asax文件中添加如下代码就OK了。

    ASP.NET的错误处理机制 - Ice - Ice 的博客protected void Application_Error(object sender, EventArgs e)

    ASP.NET的错误处理机制 - Ice - Ice 的博客    {    Exception ex = Server.GetLastError().GetBaseException();

    ASP.NET的错误处理机制 - Ice - Ice 的博客        //实际应用中这里可以将Exception信息记Log或是保存到数据库中

          //还可以将错误发邮件给网站维护人员

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

           //清除Exception,避免继续传递给上一级处理

    ASP.NET的错误处理机制 - Ice - Ice 的博客        //这里上级就是<CustomerErrors>配置节了

    ASP.NET的错误处理机制 - Ice - Ice 的博客        Server.ClearError();

    ASP.NET的错误处理机制 - Ice - Ice 的博客    }

         4.<customErrors>配置项

           配置文件web.config中的<customErrors> 配置节,可将重定向页指定为默认的错误页defaultRedirect或者根据引发的 HTTP 错误代码指定特定页。如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。

     

    ASP.NET的错误处理机制 - Ice - Ice 的博客<customErrors mode="On" defaultRedirect="~/ErrorHandling/ApplicationError.html">

         <error statusCode="404" redirect="~/ErrorHandling/404.html" />

    ASP.NET的错误处理机制 - Ice - Ice 的博客 </customErrors>

           同样,如果Application_Error和<customerErrors>同时存在,也存在执行顺序的问题。因为优先级 Application_Error事件> <customErrors>配置项,所以发生应用程序级错误时,优先执行 Application_Error事件中的代码,如果Application_Error事件中调用了Server.ClearError()函数,<customerErrors>配置节中的defaultRedirect不起作用,因为Exception已经被清除;如果 Application_Error事件中没用调用了Server.ClearError()函数,错误页会重新定位到defaultRedict指定的 URL页面,为用户显示友好出错信息。