Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在AngularJS上设置默认标题,但不';不要在一个特定的请求上使用它_Angularjs_Http Headers_Request - Fatal编程技术网

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

在AngularJS上设置默认标题,但不';不要在一个特定的请求上使用它,angularjs,http-headers,request,Angularjs,Http Headers,Request,为了发送OAuth2令牌,我在AngularJS上设置了如下默认标头: $http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token; 这很好,但对于一个特定的请求,我不需要这个头(我得到一个错误) 在执行该请求时,是否有排除默认标头的方法 谢谢 解决了的 谢谢你让我走上了正确的道路。答案如下: $http({ method: 'GET', url: 'http://.../', t

为了发送OAuth2令牌,我在AngularJS上设置了如下默认标头:

$http.defaults.headers.common['Authorization'] = 'Bearer ' + access_token;
这很好,但对于一个特定的请求,我不需要这个头(我得到一个错误)

在执行该请求时,是否有排除默认标头的方法

谢谢

解决了的 谢谢你让我走上了正确的道路。答案如下:

$http({
    method: 'GET',
    url: 'http://.../',

    transformRequest: function(data, headersGetter) {
        var headers = headersGetter();

        delete headers['Authorization'];

        return headers;
    }
});

当您使用$http进行呼叫时,您可以通过直接在请求配置中提供默认标题来覆盖这些标题:

$http({method: 'GET', url: '/someUrl', headers: {'Authorization' : 'NewValue'} }).success();
否则,您可以使用$http配置中的
transformRequest
参数转换请求。见文件:

transformRequest–
{function(data,headersGetter)| Array.}
–transform 函数或此类函数的数组。变换函数需要 http请求主体和标头,并返回其已转换的 (通常序列化)版本

通过这种方式,您可以在发送单个请求之前删除其标头:

$http({method: 'GET', 
       url: '/someUrl', 
       transformRequest: function(data,headersGetter){ //Headers change here } 
}).success();

对于后来者,虽然解决方案可能已经奏效,但实际上您不应该为此使用transformRequest

$http服务的Angular文档实际上涵盖了以下确切情况:

要明确删除通过自动添加的标题,请执行以下操作: $httpProvider.defaults.headers在每个请求的基础上,使用头 属性,将所需标题设置为未定义。 例如:

无法再使用
transformRequest
修改请求头:

如果需要动态添加/删除标题,则应在 标题函数,例如:


虽然
$httpProvider
可以覆盖
$http
intereceptor的使用是处理这个问题的一种方法,但我最终还是这样做了

function getMyStuff(blah) {

        var req = {
            method: 'GET',
            url: 'http://...',
            headers: {
                'Authorization': undefined
            }
        }
        return $http(req)
            .then(function(response) {
                return response.data;
            });


}

因此,如果我将其设置为默认标题(不是transformRequest,而是我在问题帖子中所做的那样),我就不能为一个请求真正取消设置它?如果您想取消设置,您必须为您的特定请求使用
transformRequest
参数,并通过自定义函数修改标题。注意-由于5da1256,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
    }
  }
})
function getMyStuff(blah) {

        var req = {
            method: 'GET',
            url: 'http://...',
            headers: {
                'Authorization': undefined
            }
        }
        return $http(req)
            .then(function(response) {
                return response.data;
            });


}