2016-07-02 3 views
0

Gegeben ein Ausnahmefilter wie folgt.WebApi2 Standard Ausnahme Objekt für Filter

public override void OnException(HttpActionExecutedContext context) 
    { 
     var resp = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
     { 
      // what must I change here to return an object 
      // similar to the default exception handler? 
      Content = new StringContent("THIS IS MY ERROR"), 
     }; 
     throw new HttpResponseException(resp); 
    } 

Die Ausnahme Grund an den Client zurückgegeben JavaScript eine einfache Zeichenfolge ist.

Wenn eine Ausnahme in einem Standard geworfen wirdWebApi2 Controller, der Standard Grund Objekt zurückgegeben enthält die Konfiguration, Daten, headers etc. Ich kann kein Beispiel finden, wie all diese zusätzlichen Informationen von meinem Ausnahmefilter zurückgegeben werden. Ich habe versucht, die Quelle ohne Erfolg Check-out ...

enter image description here

$http.get('/mydata') 
    .catch(function(reason) { ... do stuff with reason }) 
    .then(...); 

Was muss ich ändern, um die gleiche Standardantwort nicht nur ein einfacher String zurück.

Content = new ... // what goes here. 
+0

Ich habe nicht den genauen Code mit mir, aber ich habe das ein paar Mal getan. Sie müssen ein 'IHttpActionResult' zurückgeben. Mit diesem können Sie entweder Ihre HTTP-Statuscodes 500, 400, 401, 403 usw. zurücksenden. –

+0

Vielen Dank: Fermat wäre stolz – Jim

Antwort

0

zu jemand anderem mit diesem speziellen Problem.

public override void OnException(HttpActionExecutedContext context) 
{ 
    var exception = context.Exception as DbEntityValidationException; 
    if (exception == null) 
     return; 

    var errors = exception.EntityValidationErrors.SelectMany(_ => _.ValidationErrors); 
    var messages = errors.Select(_ => Culture.Current($"{_.PropertyName}:{_.ErrorMessage}")); 
    var message = Culture.Current($"{context.Exception.Message}<br/>{string.Join("<br/>", messages)}"); 

    // create an error response containing all the required detail... 
    var response = context.Request.CreateErrorResponse(
     HttpStatusCode.InternalServerError, 
     message, 
     exception); 
    throw new HttpResponseException(response); 
} 
0

Der Grund, warum Sie nicht die Fehlermeldung erhalten Sie Ihr HttpResponseMessage es nicht enthalten.
Also müssen Sie es hinzufügen Objekt

 
    public override void OnException(HttpActionExecutedContext context) 
     { 
      if (context.Exception is NotImplementedException) 
      { 
       context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented); 
      } 
     } 

und in Ihre Aktion respone Sie NotImplementedException Exception

[NotImplExceptionFilter] 
    public Contact GetContact(int id) 
    { 
     throw new NotImplementedException("This method is not implemented"); 
    } 

Hoffe, es hilft werfen.

+1

Es hilft nicht wirklich zu erklären, wie das JavaScript-Datenobjekt an den Client zurückgegeben wird im Standard IHttpActionResult – Jim

Verwandte Themen