将保留字符作为URL参数值发送

时间:2015-12-15 09:23:03

标签: angularjs http url get escaping

我必须按原样发送参数值'AbCd/EfgH'。但角度从'/'转移到%2F。我无法控制URL

解决此问题的最佳方法是什么?

我不想强制角度停止对所有其他网址进行编码。

$http.get(URL, {
      params: {
        emv_ref: 'AbCd/EfgH',
        email: email
      }
});

1 个答案:

答案 0 :(得分:1)

Angular URL会对所有参数进行编码,您不能只从此进程中排除一个参数。你只需要用必要的参数手动编写URL。使用方便的$httpParamSerializer服务来序列化部分参数,并将非编码附加到params字符串:

var params = $httpParamSerializer({email: email}) + '&emv_ref=AbCd/EfgH';
$http.get(URL + '?' + params); 

或者更清洁的方法是使用自定义paramSerializer功能:

$http.get(URL, {
    paramSerializer: function(params) {
        return $httpParamSerializer({email: email}) + '&emv_ref=AbCd/EfgH';
    }
});

..或者像这样:

$http.get(URL, {
    params: {
        email: email,
        emv_ref: 'AbCd/EfgH'
    },
    paramSerializer: function(params) {
        var ref = '&emv_ref=' + params.emv_ref;
        delete params.emv_ref;
        return $httpParamSerializer(params) + ref;
    }
});