5

我们有一个 HttpModule 旨在捕获异常并将它们记录到数据库中。它看起来像这样:

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 属性)。

怎么来的?

除了在页面方法本身中重新实现异常日志记录之外,我能做些什么吗?

4

1 回答 1

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...
    }        
}
于 2012-11-12T17:13:04.283 回答