Angularjs $http.post不使用标头
我对angularjs是新手。我正在尝试发出需要授权的API请求。我已经将它包含在请求的标题中,但它仍然不起作用。查看Chrome网络选项卡,它显示使用的方法是选项,而不是POSTAngularjs $http.post不使用标头,angularjs,api,http,Angularjs,Api,Http,我对angularjs是新手。我正在尝试发出需要授权的API请求。我已经将它包含在请求的标题中,但它仍然不起作用。查看Chrome网络选项卡,它显示使用的方法是选项,而不是POST app.config(['$httpProvider', function ($httpProvider) { $httpProvider.defaults.headers.common = {}; $httpProvider.defaults.headers.put = {}; $httpP
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)
})
}
}
});
我猜它不起作用,你是说你拿到了401。这是IIS和CORS的问题。只要在API上启用了CORS,一些请求就会发送一个预飞行选项请求。问题是,选项请求没有您的身份验证头,IIS需要这些身份验证头,它找不到这些头,因此会以401响应。我遇到了同样的问题,并在文章中找到了解决方法。如果您在IIS上对API使用集成模式,则此修复将很容易。下面是链接中的重要内容 创建IHTTP模块:
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>
这会创建一个IHttpModule,仅当您处于集成模式时,它才会在IIS授权之前运行。如果您处于经典模式,我还没有找到对此的修复程序,请检查它是否是选项请求,然后允许它
希望这有帮助。您在API上使用CORS吗?您能在chrome调试器网络选项卡中看到发送的标题吗?您是否尝试过使用诸如chrome Postman extension之类的工具并手动设置标题,以查看API是否使用正确的内容进行响应?@BenBlack是的,我的API使用CORS。@当我向Postman发送请求时,Mrsieurninja正在使用它。