Delphi RESTDebugger GET请求URL编码的哈希%23不工作



我需要一个简单的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

如果以下两个字符是有效的十六进制字符,则不会对%进行编码。

最新更新