在AngularJS上设置默认标头,但不要在一个特定请求上使用它

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)


Alk*_*kie 8

对于后来者来说,虽然解决方案可能有效 - 但实际上您不需要为此使用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)


Bre*_*rne 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
    }
  }
})
Run Code Online (Sandbox Code Playgroud)