2017-08-12 47 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