ASP.NET Core WebApi将错误消息返回给AngularJS $ http promise

时间:2016-08-07 13:43:03

标签: angularjs error-handling asp.net-core-mvc angular-promise

我想将异常消息返回给AngularJS UI。 作为后端,我使用ASP.NET Core 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;
    }

但是在Angular方面,失败承诺只会看到状态和statusText“内部服务器错误”:

enter image description here

如何将错误消息传递给Core Web Api的Angular $ http失败承诺?

1 个答案:

答案 0 :(得分: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返回。)