Поймать исключение и очистить его до того, как ELMAH получит его - PullRequest
2 голосов
/ 18 февраля 2011

У меня есть проблема, когда у меня возникает исключение, которое я записываю в Global.asax. В рамках этой обработки исключений я перенаправляю пользователя на определенную страницу из-за этого исключения.

У меня также есть обработка ошибок ELMAH с подключенным модулем электронной почты. Я не хочу получать электронные письма об этом исключении. Я также не хочу добавлять исключения этого типа в список игнорируемых ELMAH, в случае, если я хочу выполнить детальную работу вокруг исключения (то есть, только если оно соответствует определенным свойствам, происходит на определенных страницах)

Я хочу:

  • написать Application_OnError, что перенаправляет пользователя на страницу (я знаю, как сделать эту часть, подробнее о процедуре, которую я оставил здесь)
  • в Application_OnError остановке ELMAH от получаю эту ошибку после того, как поймал ее

В настоящее время я вызываю Server.ClearError() в своем методе App_OnError, но все еще получаю эти электронные письма.

Ответы [ 2 ]

5 голосов
/ 19 февраля 2011

Согласно документации ELMAH

Я оставил свой метод 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 голосов
/ 18 февраля 2011

Используете ли вы также атрибут [HandleError]? Я бы сделал так:

  1. Создайте пользовательский атрибут HandleError для уровня действия и не примените атрибут к действию, если я не хочу вовлекать ELMAH.
  2. Код Application_Error будет существовать как есть.
...