异常日志记录HttpModule不会从ASP .NET Page Method中捕获错误

时间:2012-10-18 08:13:46

标签: asp.net webforms

我们有一个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)
        {
        }
    }
}

这一般都有效,但我注意到,当页面方法中出现错误时,OnError方法永远不会触发(即标记有WebMethod属性的代码隐藏文件中的方法)。 / p>

怎么回事?

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

1 个答案:

答案 0 :(得分:2)

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

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...
    }        
}