我使用向导创建了一个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。它没有这个问题。
答案 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;