检测请求用于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; 
      } 
     }; 
    } 
]);;