4

例外メッセージをAngularJS UIに返したいと思います。バックエンドとして 私はASP.NETコアのWebのAPIコントローラを使用します。

[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; 
    } 

しかし角度側に、障害の約束は、ステータスのみとSTATUSTEXT "内部サーバーエラー" を見て:

enter image description here

コアWeb APIからのAngular $ http失敗の約束にエラーメッセージをどのように渡すことができますか?

+0

があなたの代わりにHTTP 500です。このコードで 'HttpStatusCode.InternalServerError'を返し、エラーがjsonHttpResponse''であるかを把握する必要がありそれに 'message'を設定します。 – Claies

答えて

3

exception filteringを実行していない限り、throw new HttpResponseException(message)は、キャッチされない例外になります。これは、一般的な500内部サーバーエラーとしてフロントエンドに返されます。

代わりに行うべきことは、BadRequestResultのようなステータスコードの結果を返すことです。

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

もご覧ください:how to return uncaught exceptions as JSONに私の答えをこれは代わりに、文字列を返す、あなたのメソッドがIActionResultを返す必要があることを意味します。 (必要であればすべてキャッチされない例外ではなく、JSONとして返される。)

+0

しかし、それが悪い要求でない場合はどうですか?バックエンドから例外が発生する可能性があり、それは500(内部サーバーエラー)を保証します。 –

+0

@DanielPrzybylskiその場合、例外を投げ捨てることができます(またはキャッチされていないものをバブルアップさせることができます)。その結果、クライアントに「500 Internal Server Error」が送信されます。または、自分でステータスコード500を返すこともできます。 –

+0

それは私がすでに終わったことです、私はちょうど便利な方法としてそれが含まれていないのか分かりません。また、HttpResponseExceptionが.NET 4.xで行ったように、HttpResponseにメッセージを埋め込む方法が不思議です。 –

関連する問題