我需要一个简单的REST get调用,例如
.../process('123') -> working
.../process('123#') -> of course not working
.../process('123%23') -> should be working
在REST工具"Postman"中,它使用编码的URL,即#->%23
我尝试了以下设置
Content-type: application/json; charset=utf-8
Content-type: application/x-www-form-urlencoded; charset=UTF-8
两者都不起作用。
请提供建议谢谢Ralph
Datasnap.DSClientRest单元中的EncodeURIComponent对我造成了同样的问题。
我的解决方案是将单元复制到源目录,并更改函数EncodeURIComponent,将TNetEncoding.URL.Encode的选项从[]
更改为[TURLEncoding.TEncodeOption.EncodePercent]
,这样新的结果行看起来像:
Result := TNetEncoding.URL.Encode(AStr, UnsafeChars, [TURLEncoding.TEncodeOption.EncodePercent]);
原因是,如果在没有[TURLEncoding.TEncodeOption.EncodePercent]
的情况下调用部件
if not(TEncodeOption.EncodePercent in Options) and (I + 2 < Len) and (Buff[I] = Ord('%')) and
IsHexChar(Buff[I + 1]) and IsHexChar(Buff[I + 2]) then
begin
Result := Result + '%' + Char(Buff[I + 1]) + Char(Buff[I + 2]);
Inc(I, 3);
end
如果以下两个字符是有效的十六进制字符,则不会对%进行编码。