2017-02-20 3 views
0

Mit MVC API Handhabung Wenn wir einen Fehler in unserem API-ControllerWeb API allgemeine Fehler

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

      var t = number1/number2; 

    } 

werfen möchten wir diesen Fehler in unserem deligatingHandler

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

prüfen alle Eigenschaften erfassen der Nachricht wird nur eine generische Fehlermeldung angezeigt und nicht der Fehler, der vom Controller ausgelöst wird.

Log.Error(xxxxX) 

ist unser Aufruf zu log4net.

Gibt es eine Möglichkeit, diesen Fehler an den Handler zu übergeben? Oder gibt es einen besseren Weg, dies zu erreichen?

+1

Wenn Sie nur etwas mit der Ausnahme machen wollen, Ihre Die beste Wette ist wahrscheinlich ein benutzerdefinierter Ausnahmefilter. – yaakov

Antwort

0

Es ist besser, allgemeine Fehlerattributfilter zu verwenden, wie unten:

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" 
      }); 
     } 

und registrieren Sie es in Ihrem WebApiConfig Klasse wie:

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