【问题标题】:AngularJS $http custom header for all requests所有请求的 AngularJS $http 自定义标头
【发布时间】:2015-04-29 13:18:12
【问题描述】:

我想知道是否有任何方法可以通过添加自定义信息来配置所有 $http 请求标头。类似配置的东西:

 var config = {headers: {
            'Authorization': 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==',
            'Accept': 'application/json;odata=verbose'
        }
    };

但是对于所有 $http 调用,我将在不同的服务中进行。我确定有一个解决方案:D.Thanks

【问题讨论】:

标签: angularjs http


【解决方案1】:

您可以创建一个$http 拦截器来扩展您的标头:

myapp.factory('httpRequestInterceptor', function () {
  return {
    request: function (config) {

      config.headers['Authorization'] = 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==';
      config.headers['Accept'] = 'application/json;odata=verbose';

      return config;
    }
  };
});

myapp.config(function ($httpProvider) {
  $httpProvider.interceptors.push('httpRequestInterceptor');
});

【讨论】:

  • 可能是一个愚蠢的问题,但为什么授权令牌有前缀“基本”?
  • 这只是一个例子:)
  • @TheLittleNaruto Authorization 标头有一些默认选项,例如Basic base64encodedStringSeperatedWithA:Bearer tokenString,格式为Authorization: <type> <credentials>,这是整个互联网的标准。
  • @DeanMeehan 谢谢。你回复也不算晚,反正也就一年而已。
  • Stackoverflow 将永远存在,我只是想为其他搜索相同问题的人留下一些信息! :)
【解决方案2】:

更简单的解决方案是使用 Angular 的 run 块:

app.run(['$http', function ($http) {
    $http.defaults.headers.common['Authorization'] = 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==';
    $http.defaults.headers.common['Accept'] = 'application/json;odata=verbose';
}]);

注意:此解决方案仅允许您传递静态值一次,因为 run 块仅执行一次。

【讨论】:

  • 如果用户在运行时登录后他还没有获得授权令牌,这就是为什么最好使用拦截器的原因
  • 是的,我知道,但我根据问题回答,因为作者想在 all 请求中添加标头:-)
  • 我在 Angular v1.0.6 中尝试这个,但属性 'common' 不存在。有什么想法吗?
【解决方案3】:
  use the folllowing code and  you can also control  $http timeout from 
 config setting.    
 'use strict';
   var app = angular.module('b2capp', []);
   var apiRequestCount = 0;      
   app.config(function ($httpProvider) {
      $httpProvider.interceptors.push(function ($rootScope, $q) {
       return {
           request: function (config) {
               apiRequestCount++;
                //   config.timeout =300000;
              return config;
          },
          response: function (response) {
               return response;
          },
           responseError: function (rejection) {
             switch (rejection.status) {
                   case 408:
                        console.log('connection timed out');
                        break;
              }
               // return $q.reject(rejection);
               return rejection;
            }
          }
       })
    });
 }]);
   app.controller('myCtrl', function ($scope, $http, $timeout) {
    var headers = {
            //'Authorization': 'Basic ' + btoa(username + ":" + password),
               'Access-Control-Allow-Origin': true,
               'Content-Type': 'application/json; charset=utf-8',
               "X-Requested-With": "XMLHttpRequest"
                 }
    $http.post(url + 'Search_6e', reqCookie, {
                   headers
            })
            .then(function Success(response) {               
                 $scope.myData = resultData;
                 console.log($scope.myData);
           }, function myError(response) {
              //error code
    });

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2014-08-13
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2019-09-25
    • 2011-03-04
    相关资源
    最近更新 更多