2011-02-18 25 views
2

我遇到了一个问题,我在Global.asax中捕获了一个异常。作为此异常处理的一部分,我将该用户重定向到特定页面,因为此例外。在ELMAH获取它之前捕获一个异常并将其清除

我也有插入电子邮件模块的ELMAH错误处理。我不想收到此例外的电子邮件。我也不想把这种类型的异常添加到ELMAH忽略列表中,以防我希望围绕异常执行细化的工作(即,只有匹配某些属性,才会在特定页面上发生)

我想:

  • Application_OnError该 用户将页面重定向(我知道如何做到这一点的一部分,更多的程序我在这里已经离开它)
  • Application_OnError停止ELMAH从 收到此错误在我抓到它之后

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

+0

try/catch怎么样? – 2011-02-18 04:57:18

+0

我想全局执行,而不是控制器方法 – Doug 2011-02-18 06:28:45

回答

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方法仅在打开邮件过滤器错误时才需要 - 我是这么做的。

0

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

  1. 创建行动水平的自定义属性HandleError和在哪里我不想让ELMAH介入操作将不适用的属性。
  2. Application_Error代码将按原样存在。