[英]How to get absolute URL in angular HTTP Interceptor?
在我们的应用程序中,对于每个请求,前端都会对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个字符,哈希也不正确。
这可以通过添加过滤器并推送到拦截器来实现
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和参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.