所有请求的AngularJS $ http自定义标头

ale*_*xsc 45 http angularjs

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

 var config = {headers: {
            'Authorization': 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==',
            'Accept': 'application/json;odata=verbose'
        }
    };
Run Code Online (Sandbox Code Playgroud)

但对于我将在不同服务中进行的所有$ http呼叫.我确信有一个解决方案:D.谢谢

boi*_*iil 83

您可以创建一个$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');
});
Run Code Online (Sandbox Code Playgroud)

  • @TheLittleNaruto"Authorization"标题有一些默认选项,例如`基本base64encodedStringSeperatedWithA:`或'Bearer tokenString`,形式为`Authorization:<type> <credentials>`,这是整个互联网的标准. (3认同)
  • Stackoverflow 将永远存在,我只是想为其他搜索相同问题的人留下一些信息!:) (2认同)

Sha*_*wal 22

一个更简单的解决方案可能是使用Angular的run块:

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

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

  • 如果用户在运行时登录后他还没有授权令牌,这就是问题,这就是更好地使用拦截器的原因 (8认同)