0

在我的 RESTful API 中,我在某些特殊情况下返回重定向 (303)(例如,内部订阅已过期;我知道这听起来不像 REST)。为了测试我的 API,我使用 jQuery 编写了一个简单的网页。但是,如果我得到一个 303,浏览器(XHR?)似乎会处理重定向本身并获取新资源。由于这对 Ajax 调用是隐藏的,因此它最后只得到 200。当然这是误导,因为最初的调用没有成功!显然这不是我的想法:我希望我的客户端脚本知道它必须做一些不同的事情(-> 获取另一个资源)。

现在我问自己返回 303 是否是个好主意?相反,我可以返回一个简单的 4xx 并让客户端自行处理......(可能从头开始)

$.ajax({
url: self.links()[0].href,
type: "POST",
statusCode: {
    200: function () {
        //I always ended up here
    },
    303: function () {
    }
},
complete: function (e, xhr, settings) {
    if (e.status === 200) {
        //..and then here
    } else if (e.status === 303) {
    } else {                           
    }
}
4

2 回答 2

1

jQuery$.ajax总是跟随重定向。恐怕不能禁用。

返回重定向作为对 XHR 请求的响应

如何防止 jQuery ajax 在发布后跟随重定向?

于 2013-06-06T11:46:40.813 回答
0

答案有点晚了:),但我不得不自己研究。

API 应返回 401 Not Authorized,但网页应返回 302/303 Redirect From https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return -401-not-authorized-instead-of 和   A ​​SP.NET Web API:返回 401/未授权响应的正确方法

  HTTP 响应状态码 302 Found 是执行 URL 重定向的常用方法。带有此状态代码的 HTTP 响应将在位置标头字段中另外提供一个 URL。带有此代码的响应邀请用户代理(例如 Web 浏览器)向位置字段中指定的新 URL 发出第二个(否则相同)请求。来自 https://restfulapi.net/http-status-codes/

换句话说,如果 javascript 进行 ajax 调用并收到 302,它将对新位置进行另一个 ajax 调用,但不会将整个页面重定向到新的 URL     ASP.NET Web API:返回 401/未授权响应的正确方法

另一个相关讨论在ASP.Net 5 (vNext) Web API 未授权请求返回 302 重定向响应而不是 401

于 2017-11-12T04:36:41.493 回答