要发送OAuth2令牌,我在AngularJS上设置默认值标头,如下所示:
$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;
这很好但我不需要这个标题(我得到一个错误)来处理一个特定的请求。
有没有办法在执行该请求时排除默认标头?
谢谢!
感谢Riron让我走上了正确的道路。这是答案:
$http({
method: 'GET',
url: 'http://.../',
transformRequest: function(data, headersGetter) {
var headers = headersGetter();
delete headers['Authorization'];
return headers;
}
});
答案 0 :(得分:19)
当您使用$ http拨打电话时,您可以直接在请求配置中覆盖默认值标头:
$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success();
否则,您可以使用transformRequest
参数转换您的请求,仍然在$ http配置中。见doc:
transformRequest -
{function(data,headersGetter)|Array.<function(data, headersGetter)>}
- 转换 函数或这些函数的数组。转换函数需要 http请求正文和标题并返回其转换后的内容 (通常是序列化的)版本。
这样,您可以在发送之前删除单个请求的标头:
$http({method: 'GET',
url: '/someUrl',
transformRequest: function(data,headersGetter){ //Headers change here }
}).success();
答案 1 :(得分:8)
对于后来者来说,虽然解决方案可能有效 - 但实际上你不应该为此使用transformRequest。
$ http服务的Angular文档实际上涵盖了这种情况:
显式删除自动添加的标头 每个请求的$ httpProvider.defaults.headers,使用标题 属性,将所需标题设置为未定义。 例如:
var req = {
method: 'POST',
url: 'http://example.com',
headers: {
'Content-Type': undefined
},
data: {
test: 'test'
}
}
$http(req).success(function(){...}).error(function(){...});
答案 2 :(得分:6)
Angular 1.4.0无法再使用transformRequest
修改请求标头:
如果需要动态添加/删除标题,则应该完成 标题函数,例如:
$http.get(url, {
headers: {
'X-MY_HEADER': function(config) {
return 'abcd'; //you've got access to a request config object to specify header value dynamically
}
}
})
答案 3 :(得分:0)
虽然$httpProvider
可以覆盖$http
,但使用intereceptors
是处理此问题的一种方法,我最终会这样做
function getMyStuff(blah) {
var req = {
method: 'GET',
url: 'http://...',
headers: {
'Authorization': undefined
}
}
return $http(req)
.then(function(response) {
return response.data;
});
}