Jul*_*ius 25 request http-headers angularjs
为了发送OAuth2令牌,我在AngularJS上设置默认标头,如下所示:
$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;
Run Code Online (Sandbox Code Playgroud)
这工作得很好但我不需要这个标题(我得到一个错误)一个特定的请求.
有没有办法在执行该请求时排除默认标头?
谢谢!
感谢Riron让我走上了正确的道路.这是答案:
$http({
method: 'GET',
url: 'http://.../',
transformRequest: function(data, headersGetter) {
var headers = headersGetter();
delete headers['Authorization'];
return headers;
}
});
Run Code Online (Sandbox Code Playgroud)
Rir*_*ron 19
当您使用$ http拨打电话时,可以通过直接在请求配置中提供默认值来覆盖默认值标头:
$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success();
Run Code Online (Sandbox Code Playgroud)
否则,您可以使用transformRequest
参数转换您的请求,仍然在$ http配置中.见文档:
transformRequest -
{function(data,headersGetter)|Array.<function(data, headersGetter)>}
转换函数或此类函数的数组.transform函数接受http请求主体和头部并返回其转换的(通常是序列化的)版本.
这样,您可以在发送之前删除单个请求的标头:
$http({method: 'GET',
url: '/someUrl',
transformRequest: function(data,headersGetter){ //Headers change here }
}).success();
Run Code Online (Sandbox Code Playgroud)
对于后来者来说,虽然解决方案可能有效 - 但实际上您不需要为此使用transformRequest.
$ http服务的Angular文档实际上涵盖了这种情况:
要基于每个请求显式删除通过$ httpProvider.defaults.headers自动添加的标头,请使用headers属性,将所需标头设置为undefined.例如:
var req = {
method: 'POST',
url: 'http://example.com',
headers: {
'Content-Type': undefined
},
data: {
test: 'test'
}
}
$http(req).success(function(){...}).error(function(){...});
Run Code Online (Sandbox Code Playgroud)
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
}
}
})
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10984 次 |
最近记录: |