我需要使一个简单的REST GET调用正常工作,例如
.../process('123') -> working
.../process('123#') -> of course not working
.../process('123%23') -> should be working
在REST工具“邮递员”中,它使用编码的URL,即#->%23
我尝试了以下设置
Content-type: application/json; charset=utf-8
Content-type: application/x-www-form-urlencoded; charset=UTF-8
两者都不起作用。
请咨询 谢谢 拉尔夫
答案 0 :(得分:0)
Datasnap.DSClientRest单元中的EncodeURIComponent对我造成相同的问题。
我的解决方法是将单元复制到源目录,并更改函数EncodeURIComponent,以将TNetEncoding.URL.Encode的选项从[]
更改为[TURLEncoding.TEncodeOption.EncodePercent]
,这样新的结果行将如下所示:< / p>
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
如果以下两个字符是有效的十六进制字符,则将不会编码%。