我正在用Angular编写一个前端应用程序,并在Pyramid Web Framework(python)中编写了一个后端应用程序,但是在将请求查询参数从前端传递给通过HttpClient
和HttpParams
后端,例如:
const params = HttpParams().append('type', 'string1;string2');
return this.http.get(apiUrl, {params: params});
(其中this.http
是服务的HttpClient
的实例)
在后端,我有一个与请求匹配的视图,但是在这种情况下,request.params
的值为:
NestedMultiDict([('type', 'string1'), ('string2', '')])
而我希望该值是:
NestedMultiDict([('type', 'string1;string2')])
我正确使用HttpClient
+ HttpParams
吗?还是这仅仅是https://github.com/angular/angular/issues/24754上公开的Angular问题的另一个示例?
编辑:我看起来越多,就越像一个Angular问题。 jQuery将查询字符串编码为type=string1%3Bstring2
,而Angular将其设置为type=string1;string
。另一方面,如果我使用:
const params = HttpParams().set('type', encodeURIComponent('string1;string2'));
然后,Angular将查询字符串设置为type=string1%253Bstring2
,然后金字塔在request.params
中将其解码为NestedMultiDict([('type', 'string1%3Bstring2')])
。调用urllib.parse.unquote(request.params['type'])
会得到值string1;string2
。因此,angular可以正确编码URI编码字符串中存在的'%'字符,但不会编码';'在未编码的字符串中...
答案 0 :(得分:1)
使用设置方法:
const params = HttpParams().set('type', 'string1;string2');
欢呼!