ISAPI webbroker requestcontentfields为空(长度= 0)

时间:2016-05-22 10:31:27

标签: delphi iis datasnap webbroker

我使用向导创建了一个WebBroker应用程序。我更改了默认操作的代码,所以它看起来像这样:

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  i: Integer;
begin
  i := Request.ContentLength;
  Response.Content :=
    '<html>' +
    '<head><title>DataSnap Server</title></head>' +
    '<body>DataSnap Server x' +
    Request.ContentFields.Text + 'x' + IntToStr(i) + 'x' +
    '</body>' +
    '</html>';
end;

我在IIS(6.2 - Server 2012)下部署了dll,并使用webbrowser测试了dll。

http://localhost/MapServer/Mapserver.dll/?param1=hello

为了好的衡量,我试过

http://localhost/MapServer/Mapserver.dll/?param1= “你好”

浏览器输出

  

DataSnap Server xx0x

两种情况。

来自浏览器的呼叫似乎没有填充Request.ContentFields

此问题是否特定于特定版本的Delphi和/或IIS?我不理解的是什么?

我曾尝试过西雅图和柏林,结果是一样的。 感谢

P.S。我还使用该向导制作了一个独立的WebBroker。它没有这个问题。

1 个答案:

答案 0 :(得分:0)

经过一些非常深入的Google搜索,我找到了答案:(请注意,虽然Embarcadero文档指出Request.ContentFields包含字段的内容&#34;当MethodType是mtPost&#34;时,实际上没用Request.QueryFields的文档没有提及mtGet

procedure TWebModule1.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  i: Integer;
begin
  i := Length(Request.QueryFields.Text);
  Response.Content :=
    '<html>' +
    '<head><title>DataSnap Server</title></head>' +
    '<body>DataSnap Server x' +
    Request.QueryFields.Text + 'x' + IntToStr(i) + 'x' +
    '</body>' +
    '</html>';
end;