我有一个像这样的简单的AngularJS $ http块;
$http(req).then(function successCallback(response) {
alert(response);
}, function errorCallback(response) {
alert(response);
});
我的问题是,当我的ASP.NET控制器返回HTTP错误代码时,JS errorCallback会收到一个像这样的对象;
{data: "", status: 304, config: Object, statusText: "Not Modified"}
无论我做什么,我似乎都无法在回调中填充数据属性。
如果我的控制器返回HTTP OK代码,则调用'success'回调,并且返回数据可用。但不是当它出错时......帮助!
控制器功能是一个WebAPI POST处理程序,看起来像;
[System.Web.Http.HttpPost]
public async Task<HttpResponseMessage> Save([FromBody]object data)
{
...<snip>...
return new HttpResponseMessage
{
StatusCode = HttpStatusCode.NotModified,
Content = new JsonContent(JObject.FromObject(new
{
success = false,
message = "User not authorised to perform this action."
}))
};
}
相同的构造,但有;
StatusCode = HttpStatusCode.OK
成功收到JS中的成功回调。
答案 0 :(得分:2)
因此,在审核了我的问题的评论之后,事实证明问题是由我选择的Http状态代码引起的。我回来了
StatusCode = HttpStatusCode.NotModified,
此代码具有特殊含义,似乎故意剥离“数据”blob。
相反,如果我使用像
这样的代码StatusCode = HttpStatusCode.Unauthorized,
在Angular回调中按预期填充'data'blob。
此示例返回预期的错误数据;
[System.Web.Http.HttpPost]
public async Task<HttpResponseMessage> Save([FromBody]object data)
{
...<snip>...
return new HttpResponseMessage
{
StatusCode = HttpStatusCode.Unauthorized,
Content = new JsonContent(JObject.FromObject(new
{
success = false,
message = "User not authorised to perform this action."
}))
};
}