2014-01-27 3 views
0

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

public async override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) 
     { 
      try 
      { 
      return await base.ExecuteAsync(controllerContext, cancellationToken); 
      } 
      catch (MyException ex) 
      { 
       return new HttpResponseMessage(CustomCode) 
       { 
        Content = new StringContent(CustomMessage) 
       }; 
      }   
      catch (Exception ex) 
      { 
       Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 
       return new HttpResponseMessage(HttpStatusCode.InternalServerError) 
        { 
         Content = new StringContent("Ups! Something went wrong. Please try again or contact administrator!") 
        }; 
      } 
     } 

Проблема Я ожидаю, что ELMAH зарегистрирует только необработанные исключения. В моем случае регистрируется даже исключение типа MyException, хотя оно блокируется блоком catch.

Есть ли какая-либо конфигурация, которую я могу применить к ELMAH, чтобы сделать запись в журнал только необработанными?

ответ

0

ELMAH ловит все исключения, выброшенные из вашего веб-приложения. Если вы хотите, чтобы отфильтровать определенные ошибки, вы можете фильтрацию ошибок особенность Elmah, как описано здесь:

https://code.google.com/p/elmah/wiki/ErrorFiltering

В вашем случае, вероятно, потребуется добавить что-то вроде этого, чтобы ваш Global.asax.cs:

void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    if (e.Exception.GetBaseException() is MyException) 
     e.Dismiss(); 
} 
+0

ELMAH cacthes все исключения? Речь идет не только о необработанных исключениях? Я хотел бы регистрировать только необработанные исключения. – bbeda

+0

Вы можете поймать свои собственные исключения и вернуть желаемый ответ для этого. Не поймайте необработанные исключения, используя общий блок catch (исключение catch). Пусть ELMAH справится с этой ошибкой. – ThomasArdal

+0

Я поймаю это общее исключение, потому что я также хотел бы вернуть его клиенту в качестве более удобного для пользователя сообщения. – bbeda

Смежные вопросы