如何在角度HTTP拦截器中获取绝对URL?

时间:2015-10-26 16:10:47

标签: angularjs angular-http-interceptors

在我们的应用程序中,对于每个请求,前端都会散列url +数据并将它们发送到服务器。然后,服务器验证查询参数以及数据是否未被篡改。但是,在httpinterceptor中,我只能查看config.url和config.params。没有办法获得绝对网址,所以我不能直接反对它。我该怎么做呢?我尝试了一些

的方法
var url;
var params;
for (var i = 0; i < config.params.length; i++){
    params+=config.params[i].name+'='+config.params[i].value;
}
url = config.url+'?'+params;

然而这不起作用,因为我似乎无法以这种方式访问​​params。另外,我如何确定params与请求URL的顺序相同?显然,如果它甚至是1个字符不同,那么哈希就不对了。

1 个答案:

答案 0 :(得分:0)

这可以通过添加过滤器并推送到拦截器来实现

angular.module("app").config(['$httpProvider', function ($httpProvider) {
        if (!$httpProvider.defaults.headers.get) {
            $httpProvider.defaults.headers.get = {};
            $httpProvider.interceptors.push('myHttpInterceptor');
        }
        else {
        }
        $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';
        $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
        $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
    }
]);

并编写过滤器以拦截请求和响应及其错误

angular.module('app').factory('myHttpInterceptor', function($q) {
    return {
      // optional method
      'request': function(config) {

        return config;
      },

      // optional method
     'requestError': function(rejection) {
        // do something on error
        return $q.reject(rejection);
      },



      // optional method
      'response': function(response) {
        // do something on success
        return response;
      },

      // optional method
     'responseError': function(rejection) {
        // do something on error
        return $q.reject(rejection);
      }
    };
  });

在请求中,config参数将具有URL以及参数