AngularJS $ http(...)errorHandler接收数据的空字符串

时间:2016-05-01 10:39:38

标签: c# angularjs asp.net-mvc

我有一个像这样的简单的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中的成功回调。

1 个答案:

答案 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."
        }))
    };
}