4

Ich möchte Ausnahmebedingungsnachricht an die AngularJS UI zurückgeben. Als Back-End verwende ich ASP.NET Core-Web Api-Controller:

[Route("api/cars/{carNumber}")] 
    public string Get(string carNumber) 
    { 
     var jsonHttpResponse = _carInfoProvider.GetAllCarsByNumber(carNumber); 
     if (jsonHttpResponse.HasError) 
     { 
      var message = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
      { 
       Content = new StringContent(jsonHttpResponse.ErrorMessage) 
      }; 

      throw new HttpResponseException(message); 
     } 

     return jsonHttpResponse.Content; 
    } 

Aber auf Angular Seite sieht Versagen Versprechen nur Status und status "Interner Serverfehler":

enter image description here

Wie kann ich die Fehlermeldung an das Angular $ HTTP-Fehlerversprechen von Core Web API übergeben?

+0

Sie kehren 'HttpStatusCode.InternalServerError' in diesem Code, der HTTP 500. Stattdessen sollten Sie herausfinden, was Fehler in der Datei' jsonHttpResponse' und setze dazu 'Nachricht'. – Claies

Antwort

3

Es sei denn, Sie tun einige exception filtering, throw new HttpResponseException(message) wird zu einer nicht abgefangenen Ausnahme, die an Ihrem Frontend als generische 500 Internal Server Error zurückgegeben wird.

Sie sollten stattdessen ein Statuscode-Ergebnis wie BadRequestResult zurückgeben. Dies bedeutet, dass statt einen String zurückzugeben, Ihre Methode IActionResult zurückgeben muss:

[Route("api/cars/{carNumber}")] 
public IActionResult Get(string carNumber) 
{ 
    var jsonHttpResponse = _carInfoProvider.GetAllCarsByNumber(carNumber); 
    if (jsonHttpResponse.HasError) 
    { 
     return BadRequest(jsonHttpResponse.ErrorMessage); 
    } 

    return Ok(jsonHttpResponse.Content); 
} 

Siehe auch: meine Antwort auf how to return uncaught exceptions as JSON. (Wenn Sie möchten, alle abgefangene Ausnahmen wie JSON, stattdessen zurückgegeben werden.)

+0

Aber was, wenn es keine schlechte Anfrage ist? Sie könnten eine Ausnahme von Ihrem Backend erhalten, und das würde eine 500 (interner Serverfehler) rechtfertigen. –

+0

@DanielPrzybylski In diesem Fall können Sie immer eine Exception auslösen (oder zulassen, dass eine nicht erfasste Nachricht aufsteigt), was dazu führt, dass ein "500 Interner Serverfehler" an den Client gesendet wird. Oder Sie können den Statuscode 500 selbst zurückgeben. –

+0

Das ist, was ich am Ende schon getan habe, ich bin nur nicht sicher, wenn das nicht als eine bequeme Methode enthalten ist. Ich frage mich auch, wie man Nachrichten in der HttpResponse einbetten kann, wie es die HttpResponseException in .NET 4.x getan hat. –

Verwandte Themen