我有一个预先存在的角度代码,可以从API获取数据。我正在尝试为请求添加身份验证令牌。
首先,我尝试了一个简单的例子
.factory('getDep', [
'$resource', function($resource) {
return $resource('/ContactsDatabaseAPI/deps/:id', { id: '@id' }, {
query: {
method: 'GET',
isArray: false,
headers: {
'Authorization': 'Bearer ' + token
}
},
create: {
method: 'POST'
},
update: {
method: 'PUT'
},
remove: {
method: 'DELETE'
}
});
}
在Chrome中触发GET调用和F12-ing时,收到错误消息:
angular.js:11821 OPTIONS http://localhost:56057/ContactsDatabaseAPI/deps net::ERR_CONNECTION_RESET
返回状态为-1,并且没有呼叫的标志使其进入服务器端。
没有标题行,它可以正常工作。
如果我在标题中使用相同的授权值尝试 Postman 中的GET调用,这也可以。
我还尝试在httpInterceptor中添加标头并获得相同的结果:
config.headers = config.headers || {};
config.headers.Authorization = 'Bearer ' + authData.token;
我尝试过的其他事情:
我使用的是角1.5.6
答案 0 :(得分:2)
试试这个(在控制器中):
$ http.defaults.headers.common.Authorization =' Bearer' +令牌;
答案 1 :(得分:0)
我已经解决了我的问题,感谢@ Mourad-Idrissi指出我正确的方向。
之前的原因是在API运行之前没有进行飞行前检查。当我添加标头时,这改变了客户端与API通信的方式。现在有一个OPTIONS调用API导致错误。由于领域不同,这引入了我对CORS的世界。
通过在我的后端Web API中将以下内容添加到我的Application_BeginRequest()方法,现在飞行前通过,我的应用程序继续。
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}