在我们的应用程序中,对于每个请求,前端都会散列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个字符不同,那么哈希就不对了。
答案 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以及参数