(原创)利用HttpModule非侵入式的显示异常信息

在工作中,我们常常会需要维护一些老的asp.net程序,这些程序通常没有完善的异常处理机制,在生产环境中,web.config中的customErrors节点的mode属性通常被设为On,这样,当程序在生产环境中出错之后,asp.net只是默认显示一个界面,告诉你程序出错了,但异常信息什么的通通没有,这时,要调试异常,就非要把代码拿到本地,用调试模式或为相应的代码加上异常处理,这样做起来显得很麻烦。在这里我介绍以一个简单的方法,不需要拿到代码,仅需要为web.config添加一个配置项,并向asp.net程序bin目录下copy一个dll就可以方便的显示异常信息。

我们可以利用 HttpModule 统一干预、处理(例如: 过滤关键字) ASP.Net WebForm Control 的输出,就利用它,我们来为程序构建一个统一的简单异常处理模块。

首先,新建一个项目,起名为ErrorProcessHttpModule,新建一个类,实现IhttpModule接口,代码如下

public class ErrorProcessHttpModule : IHttpModule

    {

        private void Application_ErrorHandle(object sender, EventArgs e)

        {

            string msg = HttpContext.Current.Server.GetLastError().ToString();

            HttpContext.Current.Response.Write(msg);

        }

 

        #region IHttpModule Members

        public void Dispose()

        {

           

        }

 

        public void Init(HttpApplication context)

        {

            context.Error += new EventHandler(Application_ErrorHandle);

           

        }

        #endregion

    }

 

以上代码向HttpApplicationApplication_Error时间绑定一个处理函数Application_ErrorHandle当程序发生错误时,就会自动执行Application_Error函数,将错误信息输出。

随后将ErrorProcessHttpModule项目进行编译,得到一个ErrorProcessHttpModule.dll

如果你的那个程序没有异常处理机制,而又需要查看异常信息,我们就可以将这个dll 文件copy到该程序的bin目录,并修改这个项目的web.config,为它的<httpModules>节点添加元素,如下:

<httpModules>
    
<add name="ErrorProcessHttpModule" type="ErrorProcessHttpModule.ErrorProcessHttpModule, ErrorProcessHttpModule"/>
</httpModules>


大功告成,这样当程序出错时,就会自动输出异常信息了。

嗯,用此种方式输出异常信息,记着要把customErrors节点得mode改成On,否则程序会议asp.net默认的方式显示异常信息的。

posted @ 2009-07-22 10:47  InSky  阅读(509)  评论(0编辑  收藏  举报