2017-02-20 70 views
0

使用MVC API,如果我們的API控制器中拋出一個錯誤的Web API通用的錯誤處理

public HttpResponseMessage GetError(int id) 
    { 
      int number1 = 3000; 
      int number2 = 0; 

      var t = number1/number2; 

    } 

我們希望我們的deligatingHandler

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
message = base.SendAsync(request, cancellationToken); 
if (!message.Result.IsSuccessStatusCode) 
      { 
       Log.Error(xxxxxxx) 
      } 
} 

檢查所有屬性中捕獲此錯誤的消息,它只顯示通用錯誤消息,而不是控制器拋出的錯誤。

Log.Error(xxxxX) 

是我們對log4net的調用。

有沒有辦法將這個錯誤傳遞給處理程序?還是有更好的方法來實現這一目標?

+1

如果你只想做一些不同之處,你最好的賭注可能是一個自定義的異常過濾 – yaakov

回答

0

這是更好地使用通用的錯誤屬性過濾象下面這樣:

public class ExceptionHandlingAttribute : ExceptionFilterAttribute 
    { 
     public override void OnException(HttpActionExecutedContext context) 
     { 

// log your error here 
      Log.Error(context.Exception); 

      throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError) 
      { 
       Content = new StringContent("An error occurred, please try again or contact the administrator."), 
       ReasonPhrase = "Critical Exception" 
      }); 
     } 

,並在您WebApiConfig類一樣進行註冊:

config.Filters.Add(new ExceptionHandlingAttribute());