簡體   English   中英

在運行時更新常見的AngularJS HTTP標頭

[英]Update Common AngularJS HTTP Headers at Runtime

如何在運行時從AngularJS控制器更新常見的HTTP標頭,例如$httpProvider.defaults.headers.common['Authorization'] 似乎$httpProvider只能從配置模塊訪問,但我需要更新來自控制器或控制器調用的服務的所有未來請求的公共HTTP頭。

我可以通過向控制器中注入$http來更新下一個請求的本地范圍標頭,但我需要為將來的所有請求更新HTTP標頭,特別是基本身份驗證。

不確定它何時出現在Angular中,但是在20個月之后,你可以選擇在運行時直接在$ http對象上定義默認頭。

來自$ http文檔 :設置HTTP標頭

$http.defaults.headers.common.Authorization = 'Basic dXNlcjpwYXNzd29yZA=='

當我不得不使用API​​時,我曾使用過這種策略。 我創建了一個XYZApiService來包裝對該API的所有請求。

這是一個簡單的例子:

var app = angular.module('myApp', []);

app.controller('MainCtrl', function($scope, HttpWrapper) {
  $scope.movies = [];
  HttpWrapper.setAuthorization('Basic dXNlcjpwYXNzd29yZA==');
  HttpWrapper.http({
    method: 'get',
    url: 'movies.json'
  }, function(data, status){
    $scope.movies = data;
  }, function(data, status){
    console.log('error', data, status);
  })
});

app.run();

app.factory('HttpWrapper', function($http) {
  var authorization = null;
  return {
    setAuthorization: function(auth){
      authorization = auth;
    },
    http: function(options, successCallback, errorCallback){
      if(authorization){
        options.headers = options.headers || {};
        options.headers.authorization = authorization;
      }
      console.log(options);
      $http(options).success(successCallback).error(errorCallback);
    }
  }
});

您可以在Plunker中嘗試:

http://plnkr.co/edit/hr2Rvojic0asvWxSoalo?p=preview

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM