在ELMAH获取之前捕获异常并清除它

时间:2011-02-18 03:59:05

标签: c# asp.net error-handling elmah

我遇到一个问题,即我在Global.asax中捕获异常。作为此异常处理的一部分,由于此异常,我将用户重定向到特定页面。

我也插入了电子邮件模块的ELMAH错误处理。我不想收到此例外的电子邮件。我也不想在ELMAHs忽略列表中添加这种类型的异常,以防我想对异常进行细粒度的处理(即,只有当它匹配某些属性时才会发生在某些页面上)

我想:

  • 写一个Application_OnError 将用户重定向到一个页面(我知道如何做这个部分,更多的是我在这里留下的程序)
  • Application_OnError停止ELMAH 在我抓住它后收到此错误

我目前正在Server.ClearError()方法中调用App_OnError,但仍在接收这些电子邮件。

2 个答案:

答案 0 :(得分:5)

根据ELMAH documentation

我将我的Application_OnError方法放在我的Global.asax中,但我还添加了以下全局方法:

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
{
    Filter(args);
}

void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs args)
{
    Filter(args);
}

void Filter(ExceptionFilterEventArgs args)
{
    if (args.Exception.GetBaseException() is HttpRequestValidationException)
    {
        args.Dismiss();
    }
}

如果它与我想要的类型相匹配,那么它会解除ELMAH异常 - 在我的例子中是HttpRequestValidationException

只有在您启用了错误邮件过滤器时才需要ErrorMail_Filtering方法 - 我这样做。

答案 1 :(得分:0)

您是否也使用[HandleError]属性?我的方式是:

  1. 为操作级别创建自定义HandleError属性,并且不会在我不想让ELMAH参与的操作中应用该属性。
  2. Application_Error代码将按原样存在。