我们有一个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本身内部的异常日志记录之外,我能做些什么吗?
答案 0 :(得分:2)
我找到了一个适合我的解决方案:
这是我写过的处理程序的关键点:
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...
}
}