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

RJ *_*han 5 c# asp.net-mvc angularjs

我有一个简单的AngularJS $ http块就像这样;

$http(req).then(function successCallback(response) {
    alert(response);
}, function errorCallback(response) {
    alert(response);
});
Run Code Online (Sandbox Code Playgroud)

我的问题是当我的ASP.NET控制器返回HTTP错误代码时,JS errorCallback会收到一个像这样的对象;

{data: "", status: 304, config: Object, statusText: "Not Modified"}
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我似乎无法在回调中填充数据属性.

如果我的控制器返回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."
        }))
    };
}
Run Code Online (Sandbox Code Playgroud)

同样的结构,但有;

StatusCode = HttpStatusCode.OK
Run Code Online (Sandbox Code Playgroud)

成功收到JS中的成功回调.

RJ *_*han 2

因此,在查看了对我的问题的评论后,发现问题是由我选择的 Http 状态代码引起的。我正在回来

StatusCode = HttpStatusCode.NotModified,
Run Code Online (Sandbox Code Playgroud)

这段代码有特殊的含义,似乎“数据”blob 是故意被剥离的。

相反,如果我使用类似的代码

StatusCode = HttpStatusCode.Unauthorized,
Run Code Online (Sandbox Code Playgroud)

“数据”blob 按预期在 Angular 回调中填充。

该示例返回预期的错误数据;

[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."
        }))
    };
}
Run Code Online (Sandbox Code Playgroud)