REST API:重定向(303)是一个好主意

时间:2013-06-06 11:41:00

标签: jquery api rest

在我的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 {                           
    }
}

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

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

API应返回401 Not Authorized,但网页应返回302/303 Redirect 来自https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-not-authorized-instead-ofASP.NET Web API : Correct way to return a 401/unauthorised response

HTTP响应状态代码302 Found是执行URL重定向的常用方式。具有此状态代码的HTTP响应还将在位置标头字段中提供URL。通过具有该代码的响应来邀请用户代理(例如,web浏览器),以对位置字段中指定的新URL做出第二个(否则相同的)请求。 从https://restfulapi.net/http-status-codes/

换句话说,如果javascript进行ajax调用并收到302,它将对新位置执行另一个ajax调用,但不会将整个页面重定向到新的URL ASP.NET Web API : Correct way to return a 401/unauthorised response

另一个相关讨论在ASP.Net 5 (vNext) Web API unauthorized requests returns 302 redirect response instead of 401