4

예외 메시지를 AngularJS UI로 반환하고 싶습니다. 백 엔드로 나는 ASP.NET 코어 웹 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

Core Web API에서 Angular $ http 오류 메시지에 오류 메시지를 전달하려면 어떻게해야합니까?

+0

당신은 대신 HTTP 500 인이 코드에서'HttpStatusCode.InternalServerError'를 반환, 당신은 오류가 jsonHttpResponse''에 무엇인지 파악해야한다 그리고 그것에'message'를 설정하십시오. – Claies

답변

3

exception filtering을 수행하지 않는 한 throw new HttpResponseException(message)은 일반 500 내부 서버 오류로 프런트 엔드에 반환되는 캐치되지 않는 예외가 될 것입니다.

대신 수행해야 할 작업은 상태 코드 결과 (예 : BadRequestResult)를 반환하는 것입니다. 이 대신에 문자열을 반환하는 당신의 방법은 IActionResult을 반환해야한다는 것을 의미 :

[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에 대한 내 대답. (당신이 원하는 경우 모든 캐치되지 않는 예외 대신, JSON으로 반환 할 수 있습니다.)

+0

하지만 나쁜 요청이 아니라면 어떨까요? 백엔드에서 예외가 발생할 수 있으며 이는 500 (내부 서버 오류)을 보증합니다. –

+0

@DanielPrzybylski이 경우 항상 예외를 던지거나 (잡히지 않는 것을 허용), 클라이언트에 '500 내부 서버 오류'가 전송됩니다. 또는 직접 상태 코드 500을 반환 할 수 있습니다. –

+0

그게 내가 이미 끝낸거야, 난 그냥 편리한 방법으로 포함되지 않은 경우 모르겠습니다. 또한 HttpResponseException이 .NET 4.x에서했던 것처럼 HttpResponse에 메시지를 포함하는 방법에 대해 궁금합니다. –

관련 문제