2014-01-27 60 views
0

我正在使用WebApi和ELMAH,我希望能夠將一些業務錯誤包裝到一些異常情況下的Web響應中(無日誌記錄),並讓其他人記錄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,使其僅記錄未處理的eceptions?

回答

0

ELMAH捕獲從您的Web應用程序拋出的所有異常。如果您想篩選出某些錯誤,你可以在此描述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有哪些例外?這不僅僅關於未處理的異常?我只想記錄未處理的異常。 – bbeda

+0

您可以捕獲自己的自定義異常並返回所需的響應。不要使用通用catch塊捕獲未處理的異常(捕獲異常)。讓ELMAH處理該錯誤。 – ThomasArdal

+0

我以這種方式捕獲泛型異常,因爲我也想將它作爲更加用戶友好的消息返回給客戶端。 – bbeda