我试图在我的MCV AngularJS应用程序中实现一些错误处理,但遇到了这个我不确定如何解决的问题。
结构
在我的AngularJS服务ticketService
中,我有以下方法:
this.downloadFile = function (fileId) {
return $http.get(baseUrl + "/Downloadfile/" + fileId, { responseType: "blob" });
}
在我的控制器中:
$scope.downloadFile = function (fileId) {
ticketService.downloadFile(fileId)
.then(function (response) {
// Handle correct request and response
}, function (err) {
// Handle error
notify({ message: "Something went wrong: " + err.data.Message, position: "center", duration: 10000 });
})
}
这是我从后端MVC Web API方法返回的内容:
var error = new HttpError("Failed to find file, bla bla bla.");
return Request.CreateResponse(HttpStatusCode.NotFound, error);
问题
我的问题是,由于我的responseType
设置为blob
,因此我的err
对象的响应类型相同。我相信我的后端服务应该可以覆盖此响应类型,并使用包含一些Message
的对象进行响应。
从这个回复中,我会认为我可以得到err.data.Message
,但也许我误解了这种情况?
提前谢谢。
答案 0 :(得分:0)
public HttpResponseMessage Get(int id)
{
try
{
return Request.CreateResponse(HttpStatusCode.OK, new { Status =
"OK", Message = this._myContext.GetCustomer(id) });
}
catch(Exception e)
{
return Request.CreateResponse(HttpStatusCode.Conflict, new {
Status = "NO", Message = e.ToString() });
}
}
您可以返回任何消息,例如“找不到文件,bla bla bla”。在消息中。然后你只需要检查ajax成功方法,如 data.Message ,
答案 1 :(得分:0)
$ http服务使用的XHR API无法动态更改responseType
。
您可以设置状态消息并使用:
public ActionResult Foo()
{
Response.StatusCode = 403;
Response.StatusDescription = "Some custom message";
return View(); // or Content(), Json(), etc
}
然后在AngularJS中:
$scope.downloadFile = function (fileId) {
return ticketService.downloadFile(fileId)
.then(function (response) {
// Handle correct request and response
return response.data;
}).catch(function (response) {
// Handle error
console.log(response.status);
console.log(response.statusText);
throw response;
});
};
替代方法是: