Angularjs 将错误消息从Web Api返回到$http
我正在使用Angular 1.5和ASP.NETWebAPI 2。我想在$http.get请求失败时显示一条错误消息。遗憾的是,错误回调仅包含常规状态文本(例如,内部服务器错误),而不包含我指定的消息。我怎样才能做到 Web Api控制器:Angularjs 将错误消息从Web Api返回到$http,angularjs,asp.net-web-api,Angularjs,Asp.net Web Api,我正在使用Angular 1.5和ASP.NETWebAPI 2。我想在$http.get请求失败时显示一条错误消息。遗憾的是,错误回调仅包含常规状态文本(例如,内部服务器错误),而不包含我指定的消息。我怎样才能做到 Web Api控制器: public IHttpActionResult GetSomething() { try { var result = new HttpResponseMessage(HttpStatusCode.OK); result.Conte
public IHttpActionResult GetSomething()
{
try
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(GetContent(...));
return ResponseMessage(result);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
角度呼叫:
$http.get('url')
.then(function (result) {
...
}, function (error) {
//$scope.errorMessage= ???
});
您可以创建自己的结果,其中包含您想要的任何内容:
public class ServerErrorResult : HttpActionErrorResult
{
public Exception Exception {get; set;}
public override Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var content = Content;
if(Exception != null)
{
content += $"\r\nException Details:{Exception.Message}";
}
var response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent(content),
RequestMessage = Request;
};
return Task.FromResult(response);
}
}
您还可以在控制器上创建一个扩展方法,以将某些管道抽象出来:
public static HttpActionErrorResult ServerError(this ApiController controller, Exception ex)
{
return new ServerErrorResult
{
Exception = ex
};
}
从控制器中调用它,如下所示:
public IHttpActionResult GetSomething()
{
try
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(GetContent(...));
return ResponseMessage(result);
}
catch (Exception ex)
{
return ServerError(ex);
}
}
希望能有所帮助。您可以创建自己的结果,其中包括您想要的任何内容:
public class ServerErrorResult : HttpActionErrorResult
{
public Exception Exception {get; set;}
public override Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var content = Content;
if(Exception != null)
{
content += $"\r\nException Details:{Exception.Message}";
}
var response = new HttpResponseMessage(HttpStatusCode.InternalServerError)
{
Content = new StringContent(content),
RequestMessage = Request;
};
return Task.FromResult(response);
}
}
您还可以在控制器上创建一个扩展方法,以将某些管道抽象出来:
public static HttpActionErrorResult ServerError(this ApiController controller, Exception ex)
{
return new ServerErrorResult
{
Exception = ex
};
}
从控制器中调用它,如下所示:
public IHttpActionResult GetSomething()
{
try
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(GetContent(...));
return ResponseMessage(result);
}
catch (Exception ex)
{
return ServerError(ex);
}
}
希望有帮助