检测请求用于Html模板或$ httpProvider拦截器中的其余数据
问题描述:
我需要拦截http请求以添加基址(域url)到http请求并添加access_token以进行身份验证(基于标记),模板域名与其他域名不同,但我的问题是,我无法识别请求是模板还是其他API(数据)。我的代码是:
.config(["$httpProvider", function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.interceptors.push("httpMiddleware");
}
]).factory("httpMiddleware", [
function() {
return {
request: function (config) {
// Need to recognise request is for html template or rest api
var baseUrl = "http://localhost:9926/Api/";
config.url = baseUrl + config.url;
return config;
}
};
}
]);;
答
您可以在请求的URL中检查.html
字符串。
request: function (config) {
// Check whether the requested url contains .html
if(config.url.contains('.html'))
{
// request for html templates
}
else{
// request for REST api
// you can also do check for string API in the request url to verify that the request is to our api
}
var baseUrl = "http://localhost:9926/Api/";
config.url = baseUrl + config.url;
return config;
}
答
有许多方法来验证请求,诸如检查,如果一个请求具有一些API特定的报头,检查是否URI具有如Abhilash提到模板路径在它或检查URI扩展。
下面是示例代码:
.config(["$httpProvider", function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common["X-Requested-With"];
$httpProvider.interceptors.push("httpMiddleware");
}
]).factory("httpMiddleware", [
function() {
return {
request: function (config) {
// Need to recognise request is for html template or rest api
if(config.headers['someAttr'] == valueToCheck){
// or if(config.url.contains('/path/template')){
// or if(config.url.contains('.html')){
var baseUrl = "http://localhost:9926/Api/";
config.url = baseUrl + config.url;
}
return config;
}
};
}
]);;