在Delphi REST Server中使用POST时无法获取查询参数的值

我已经编写了REST服务器,其中包含要进行更新的操作POSTCameras。在客户端中,我有

RESTClient.ResetToDefaults;
RESTClient.BaseURL := EditERServiceUrl.Text;
RESTRequest.Method := TRESTRequestMethod.rmGET;
RESTRequest.Resource := 'GetUpdateCameras';
RESTRequest.Params.AddItem('thislocn','0000',TRESTRequestParameterKind.pkGETorPOST);
RESTRequest.Params.AddItem('cameras','{"id":1,"name":"Camera 1"}',RESTRequestParameterKind.pkGETorPOST);
RESTRequest.Execute;

如果使用rmGET,则可以使用

轻松提取REST服务器中的参数。
ThisStore = Request.QueryFields.Values['thislocn'];
ThisCamera = Request.QueryFields.Values['camera'];

如果我使用rmPOST,则查询字段为空。

我不确定我该怎么做才能从TWebRequest获取查询参数。

xaut2008 回答:在Delphi REST Server中使用POST时无法获取查询参数的值

您没有指定使用哪种服务器技术,但我想它是DataSnap(REST服务器)。

在REST客户端代码中,您手动将类型pkGETorPOST的参数添加到请求中。顺便说一句,这是通过方法AddItem添加参数时的默认类型,因此您完全不需要指定它,而只使用带有2个参数function AddItem(const AName,AValue: string): TRESTRequestParameter; overload;的不变式。

The documentation代表pkGETorPOST

  

pkGETorPOST :将参数作为URL参数(对于GET请求)或作为正文参数(对于POST / PUT请求)发送。

这意味着,在GET请求的情况下,参数在URL的查询字符串中传输,而在POST请求的情况下,参数作为x-www-form-urlencoded字符串在正文中发送。要从服务器代码中的请求正文中读取此类值,必须使用属性ContentFields

ThisStore = Request.ContentFields.Values['thislocn'];
ThisCamera = Request.ContentFields.Values['camera'];

如果您甚至坚持为POST请求发送URL参数,则将其添加为pkQUERY

  

pkQUERY :当参数位置取决于请求类型时,与pkGETorPOST相比,将参数作为URL参数显式发送(对于所有请求)。

不幸的是,pkQUERYDelphi 10.3 Rio之前不可用。

本文链接:https://www.f2er.com/2962204.html

大家都在问