2017-08-12 45 views
0

我想送一個API密鑰爲每個請求我做:發送API密鑰請求頭與angularJS 1.6.3

function MyService($http) { 
    var req = { 
     method: 'GET', 
     url: 'https://api.giphy.com/v1/stickers/trending', 
     headers: { 
      'api_key':'123' 
     } 
    } 

    return $http(req); 
} 

但問題是,所有的請求都OPTIONS(拿不到),是不發送api_key。這是發送標題的正確方法嗎?謝謝

編輯,因爲它被標記爲重複:
這不是一個CORS問題。我得到的錯誤是401.這意味着驗證失敗,因爲端點沒有收到請求標頭api_key

+0

你的意思是「所有請求都是選項(不是GET)」?檢查谷歌控制檯上的網絡選項卡,看看是否有錯誤... –

+0

該選項的請求是CORS飛行前請求。 – georgeawg

回答

0

你所做的完全沒問題,但是如果api_key總是不同的,那麼你必須動態地提供api_key值以便添加到請求中。

如果它總是相同的,那麼有一個更好的方法來做到這一點:通過攔截器。你只會設置一次。同樣,這種方法是,如果你必須設置一些始終相同的參數,所以實際上它是通過HTTP請求進行標準操作的。

首先,你需要定義你的攔截器:

myApp.service('MyRequestsInterceptor', [function() { 
 
    this.request = function(config) { 
 
     config.headers.api_key = 'My Default API KEY'; 
 
     return config; 
 
    }; 
 
}]);

,然後簡單地你的攔截器添加到AngularJS $httpProvided

myApp.config([ '$httpProvider', function($httpProvider) { 
 
    $httpProvider.interceptors.push('MyRequestsInterceptor'); 
 
} ]);

+0

實際上API密鑰始終是相同的。如果我向該端點發出請求並將api_key作爲查詢字符串發送,此工作就好了。根據文件,這兩種方法都是有效的 – handsome