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

Posted

技术标签:

【中文标题】如何在 Angular 7 中对包含特殊字符的查询参数进行编码?【英文标题】:How to encode query params containing special characters in Angular 7? 【发布时间】:2019-08-26 17:43:03 【问题描述】:

我正在尝试在 Angular 7 中编码查询参数值。但是当我的查询参数值包含任何特殊字符时,我得到 400 Bad Request 状态代码

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

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

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

预期的请求 url 必须像 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

【问题讨论】:

如果你使用params,我怀疑你必须拥有?... @HereticMonkey 谢谢,删除多余的“?”后我仍然遇到同样的错误。我想知道是否需要使用请求标头设置一些选项 听起来像是后端问题。使用%20 空间是uri 编码标准 【参考方案1】:

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

decodeURIComponent(encodedURI_string)

更多信息here

【讨论】:

【参考方案2】:

同意,您可以对 urlserializer 中字符的 urls 问题进行一般更改: https://angular.io/api/router/DefaultUrlSerializer https://angular.io/api/router/UrlSerializer

您可以在 app.module.ts 中覆盖它(提供:..,..) 你可以看到这个: Angular 2 - Implement UrlSerializer

问候

【讨论】:

以上是关于如何在 Angular 7 中对包含特殊字符的查询参数进行编码?的主要内容,如果未能解决你的问题,请参考以下文章

当字符串包含特殊字符时,缓慢的正则表达式查询

如何使用 Angular 2 / Typescript 限制输入字段中的特殊字符

SQL Injection-Http请求的参数中对特殊字符的处理

MySQL模糊查询特殊字符如何查询

如何在包含其他几个查询的 sql 查询中对表进行连接?

对节点快速服务器的 Angular 7.x 查询被转换为字符对象数组