Asp.net错误->友好处理

  有些错误和异常是程序员无法控制的,如:

  •   网络不可用
  •   服务器崩溃
  •   服务器超负荷
  •   客户端请求的页面不存在或者没有权限
  •   服务器出现了不可预知的异常,而该异常没有被catch

  这些导致无法为客户端正确的提供服务,做为程序员,我们有责任为用户展现友好的自定义错误页面。

  学习到的三个方法。

  一、webconfig中进行配置

  

webconfig代码
<system.web>
        <customErrors mode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
</system.web>

  <customErrors>元素的defaultRedirect属性指向的页面是发生错误时指向远程用户的默认页面,通过配置<error>子节点可以错误按照错误类型redirect到特定的错误页面。

  mode属性的取值有三个

  1、RemoteOnly,自定义的错误页面值发送给远程用户,当在服务器本地操作出现错误时,程序还是会返回红条或者黄条,也就是最原始的那种错误信息。

  2、On,不管是远程用户还是服务器本地访问的用户,出现错误时都会跳转至自定义的错误页面。

  3、Off,完全禁用此功能。返回最原始的那种错误信息

  (注:这三个属性都是大小写敏感的,首字母大写)。

  二、Application_Error事件

  当异常未被捕获的时候,Asp.net就会触发HttpApplication类的Error事件,可以通过Global.asax文件的Application_Error事件来订阅该事件。

  

代码
     
    void Application_Error(object sender, EventArgs e) 
    { 
        // 在出现未处理的错误时运行的代码
        HttpUnhandledException eHttp = this.Server.GetLastError() as HttpUnhandledException;
        Exception eApp = eHttp.InnerException;//可以返回异常
        Response.Redirect("Default3.aspx?exe='"+Server.UrlEncode(eApp.Message)+"'");
        Server.ClearError();
        Response.End();

    }

  三、Page的ErrorPage属性

  在页面的处理过程中,可以在任何时候设置或者获取Page.ErrorPage属性,能够通过程序的方式指定异常未被捕获时,Asp.net会将客户端重定向到那个页面。

  这个有两种设置方法,一种是直接在Page属性里边设置,为某个页面设置统一的错误页面。

  

<%@ Page Language="C#"  ErrorPage="~/Default2.aspx" AutoEventWireup="true"  CodeFile="Default.aspx.cs"  Inherits="_Default" %>

  也可以在程序中动态的设置,假如页面中有n个button,可以为每个button设置特定的ErrorPage

  

protected void btnTest_Click(object sender, EventArgs e)    {       
     this.ErrorPage = "Default2.aspx";    
}

  该属性是和<customErrors>配置元素配合起来才会起作用。为了使Page.ErrorPage起作用,<customErrors>的mode属性必须设置为On。

  在异常未被捕获的时候,如果没有设置ErrorPage,那么HttpApplication.Error事件。如果HttpApplication.Error没有订阅错误事件,那么程序会去找<customErrors>配置的元素(如果可以的话)。

  优先级:ErrorPage属性,Application_Error、<customErrors>配置,如果多个错误的机制同时存在,应用程序会按照优先级找到第一个满足条件的错误机制。

  

posted on 2012-11-21 15:41  金宝的园子  阅读(305)  评论(0)    收藏  举报

导航