zoukankan      html  css  js  c++  java
  • 使用错误页统一处理错误(转)

    我们在做Asp.net应用程序的时候,通常在每个页面都要处理错误,这样一来即浪费了时间还不易于维护!在一个错误页中统一处理未知异常,是一个很好的办法!

        Asp.net 提供<customErrors>配置节提供了一个解决办法,使用方法如下:

    <system.web>

          <customErrors defaultRedirect="~/ErrorPage.aspx"

                         mode="RemoteOnly">

          </customErrors>

    </system.web>

    defaultRedirect属性用来指明当aspx页面发生了未处理错误时导向的页面(由用户自己定义),Asp.net会在导向错误页时在错误页面的地址后面加上出现异常页面的地址。~/代表应用程序根目录,mode属性的用法请查msdn,不再赘述!这样我们就可以在ErrorPage页面中使用Server.GetLastError()方法来获得最近一次发生的异常了,然后进行写日志及提示用户等操作。

        想法虽好,实现起来有问题。为什么呢?因为Asp.net使用重定向机制来重新导航的错误页面,这样错误信息就会丢失,也就是说我们用Server.GetLastError()获得的Exception对象始终是空的。因此我们可以提示用户出错,并提供一个返回出错页面的链接,却不能给我们自己一个很好的答复。

        幸好天无绝人之路,我又找到了另一种方法,如果我们在第一时间得到页面出错信息,然后使用Server.Transer()方法导航到错误页,不就可以得到错误信息了吗!做法如下:

        在Global.asax文件中撰写如下代码:

        protected void Application_Error(Object sender, EventArgs e)
        {
           Server.Transfer("~/ErrorPage.aspx");
        }

    这样我们在错误页中就可以做如下处理了:

    //得到最新的异常信息,我们得到的异常类型为HttpUnhandledException,是真正错误的一个包装,

    //至于Asp.net为什么这么做,我也不是很清楚

    Exception exp = Server.GetLastError();

    if(exp != null)

    {
           this.lblErrorMessage.Text = "您查看的页面出错了,请与管理员联系";
     

           //内部异常中保存这本次错误的详细信息 


           if(exp.InnerException != null)
           {

                //写异常日志,自己定义的方法

                WriteExceptionLog(exp.InnerException);

           }

           //清除我们已经处理的异常,以免不小心重复处理。

           Server.ClearError();

    }

    好了,事情总算完成了,仔细一看,大跌眼镜,在两种方法下,比较出错页面的地址栏就知道为什么了。造成这个问题的原因在于Server.Transfer()与Response.Redirect()方法执行方式的不同。我也没招了,解决成这样差强人意,如果有更好的办法请你告诉我。

     现在已经找到了合适的处理方式了::

    可以在Global.asax文件中写错误处理代码,可以避免以上问题:

        protected void Application_Error(Object sender, EventArgs e)
        {
           //Log.Write    ,write sth

        }


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gentle_wolf/archive/2008/11/27/3394418.aspx

  • 相关阅读:
    Flask--配置文件
    Flask--路由系统
    Flask--视图
    Flask--蓝图
    Flask--静态资源
    Flask--登录验证(多个装饰器)
    Flask--session
    CSS中的定位机制
    四、DDL常见操作汇总
    三、管理员必备技能
  • 原文地址:https://www.cnblogs.com/ceci/p/1833341.html
Copyright © 2011-2022 走看看