加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 异常日志记录HttpModule不会从ASP .NET Page Method

发布时间:2020-12-16 03:22:13 所属栏目:asp.Net 来源:网络整理
导读:我们有一个HttpModule,用于捕获异常并将它们记录到db.它看起来像这样: public class ExceptionLoggingModule : IHttpModule{ public void Init(HttpApplication context) { context.Error += OnError; } private static void OnError(object sender,EventAr
我们有一个HttpModule,用于捕获异常并将它们记录到db.它看起来像这样:

public class ExceptionLoggingModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.Error += OnError;
    }

    private static void OnError(object sender,EventArgs e)
    {
        try
        {
            var context = (HttpApplication) sender;
            var exception = context.Server.GetLastError();

            if (exception != null)
            {
                // Log exception
            }
        }
        catch(Exception)
        {
        }
    }
}

这通常是有效的,但我注意到,当Page Methods中出现错误时,OnError方法永远不会触发(即标记有WebMethod属性的代码隐藏文件中的方法).

怎么会?

除了重新实现Page方法本身内部的异常日志记录之外,我能做些什么吗?

解决方法

我找到了一个适合我的解决方案:

http://blogs.microsoft.co.il/blogs/oshvartz/archive/2008/05/17/asp-net-error-handling-using-httpmodule-full-and-partial-post-back-ajax-updatepanel.aspx

这是我写的处理程序的关键点:

public class PathfinderModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PostMapRequestHandler += this.OnPostMapRequestHandler;
        context.Error += OnError;
    }

    private void OnPostMapRequestHandler(object sender,EventArgs e)
    {
        Page aux = HttpContext.Current.Handler as Page;

        if (aux != null)
        {
            aux.Error += this.OnPageError;
        }
    }

    private static void OnError(object sender,EventArgs e)
    {
        // Blah..
    }

    private void OnPageError(object sender,EventArgs e)
    {
        // Blah...
    }        
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读