我是angularjs的新手。我正在尝试发出需要授权的API请求。我已将它包含在请求的标题中,但它仍然无法正常工作。查看Chrome网络标签,它显示使用的方法是OPTIONS而不是POST。
app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.headers.common = {};
$httpProvider.defaults.headers.put = {};
$httpProvider.defaults.headers.patch = {};
$httpProvider.defaults.headers.post = {};
$httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
}]);
app.service('Api', function ($http) {
return {
post: function(token){
$http.defaults.headers.post['Authorization'] = "Bearer " + token
$http.post('http://localhost:3000/api/profile/me').success(function(data, status, headers, config) {
console.log(data)
})
}
}
});
答案 0 :(得分:0)
我猜测它不起作用"你的意思是你得到401.这是IIS和CORS的一个问题。每当您在API上启用CORS时,某些请求将发送预检的OPTIONS请求。这样做的问题是OPTIONS请求没有您的身份验证标头,IIS需要这些身份验证标头,它没有找到它们所以它以401响应。我遇到了同样的问题并找到了我的修复程序在this文章中。如果您在IIS上使用集成模式的API,则此修复程序将很容易。链接中的重要内容如下所示。
创建IHttpModule:
public class CORSModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.PreSendRequestHeaders += delegate
{
if (context.Request.HttpMethod == "OPTIONS")
{
var response = context.Response;
response.StatusCode = (int)HttpStatusCode.OK;
}
};
}
}
然后在您的配置中注册
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="POST,GET,OPTIONS" />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type,Authorization" />
</customHeaders>
</httpProtocol>
<modules>
<add name="CORSModule" type="CORSModule" />
</modules>
</system.webServer>
这样做会创建一个在IIS授权之前运行的IHttpModule(只有当你处于集成模式时,如果你处于经典模式,我还没有找到)修复此),检查它是否是OPTIONS请求,然后允许它。
希望这有帮助。