Angular4:HttpClient和HttpParams:传递一个对象作为httpParams.set()中的一个值
问题描述:
我有一个更复杂的键值对的问题...如果我想设置一个值作为对象怎么办?Angular4:HttpClient和HttpParams:传递一个对象作为httpParams.set()中的一个值
我有这样的问题:
const includeStr = JSON.stringify({include: 'match-timeline-events'});
const params: HttpParams = new HttpParams().set('filter', includeStr);
,当我使用它:
this.http.get(environment.apiPath + '/clientMatches/' + id, {params})
我的头弄然后设置这个
(urlencoded): filter:%7B%22include%22:%22match-timeline-events%22%7D
但出于某种原因, :没有得到编码,字符串应该是
(urlencoded): filter:%7B%22include%22%3A%22match-timeline-events%22%7D
有什么想法该如何解决?
答
这可能是一个应该报告的错误。任何方式,你可以用HttpParams
custom encoder来解决它,它可以扩展默认的HttpUrlEncodingCodec
。
可以看出,HttpUrlEncodingCodec
使用custom function即doesn't encode a colon on purpose。
+0
是的,我想知道为什么:/ –
从上面的代码中不清楚param key-value是如何用':'而不是'='分隔的。可能问题在别的地方。 – estus
你是什么意思**:**而不是** = **? ...我说这是通过发送请求中的头文件...生成的url是:'http:// localhost:3000/api/... clientMatches/5987633c508eb519385779c8?filter =%7B%22include%22: %22match-timeline-events%22%7D' –
我被另一个冒号弄糊涂了,'filter:%7B%2 ...'。这些参数是否会在服务器端造成麻烦?我猜他们不编码:[和其他列出的字符](https://github.com/angular/angular/blob/4.3.1/packages/common/http/src/params.ts#L59-L67),因为他们是安全的网址,只是在编码时浪费带宽。 – estus