如何在Angular 7中编码包含特殊字符的查询参数?

时间:2019-04-04 21:06:16

标签: javascript angular http angular7 urlencode

我试图在Angular 7中对查询参数值进行编码。但是,当我的查询参数值包含任何特殊字符时,我会得到400错误的请求状态代码

请求URL失败: http://localhost/api/67/cardvalues?parentcardvalues=STONE&parentcardvalues=STONE%20AGE

但是,当查询参数值不包含任何特殊字符时,我会得到200 OK状态代码。

成功的请求网址: http://localhost/api/67/cardvalues?parentcardvalues=STONE&parentcardvalues=STONE

预期的请求网址必须类似于 http://localhost/cardvalues?parentcardvalues=VALUE1&parentcardvalues=VALUE2

下面是我的代码,

parentcardvalues=["STONE","STONE AGE"]

let myparams = new HttpParams();

    if(parentcardvalues.length != 0)
       parentcardvalues.forEach((value) => { 

myparams = myparams.append( 'parentcardvalues',   encodeURIComponent(value) );

});

 this.http.get(this.baseUrl + 'api/67/cardvalues', {params: myparams});

Swagger规范是

卷曲

curl -X GET "http://localhost/api/cardvalues?parentcardvalues=STONE&parentcardvalues=STONE%20AGE" -H  "accept: application/json"

请求网址

http://localhost/api/cardvalues?parentcardvalues=STONE&parentcardvalues=STONE%20AGE

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法解码参数:

decodeURIComponent(encodedURI_string)

更多信息here

答案 1 :(得分:0)

同意,您可以对urlserializer中的chars进行urls问题的常规更改: https://angular.io/api/router/DefaultUrlSerializer https://angular.io/api/router/UrlSerializer

您可以在app.module.ts中覆盖它(提供:{..,..}) 您可以看到以下内容: Angular 2 - Implement UrlSerializer

致谢