1

在我们的应用程序中,对于每个请求,前端都会对 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;

但是,这不起作用,因为我似乎无法以这种方式访问​​参数。另外,如何确定参数与请求 URL 的顺序相同?显然,如果它甚至有 1 个字符不同,散列就不会是正确的。

4

1 回答 1

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);
      }
    };
  });

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

于 2018-09-05T13:50:29.250 回答