Delphi XE3 DataSnap服务器中的访问请求头

5
我正在使用Delphi XE3实现一个REST服务器API(大约十年来第一次使用Delphi,所以有点生疏)。目前它正在使用Indy服务器进行调试,但最终它将成为一个ISAPI dll。
现在我已经实现了一些TDSServerClass类,并希望在类方法中访问请求头。例如,当用户请求mysite.com/datasnap/rest/foo/bar时,我希望能够在名为bar的foo类方法内读取头信息。这个可能吗?
如果不行,那么是否可以在到达REST类方法之前创建一个全局的入站请求过滤器?我需要检查API密钥和用户身份验证,并不确定最佳实现方式。谢谢。

你正在使用内置的身份验证/授权对象吗? - jachguate
API密钥和用户令牌通过请求头传递。我需要读取它们。 - Joel
注意:身份验证不应在服务器级别进行,因为只有一些类方法需要用户身份验证(令牌),而其他方法则不需要(所有方法都需要有效的API密钥)。 - Joel
1个回答

2

我不知道XE3是否有所改变,但在XE2中您可以执行以下操作:

uses
  Web.HTTPApp,
  Datasnap.DSHTTPWebBroker;

function TServerMethods1.EchoString(Value: string): string;
var
  Module: TWebModule;
begin
  Module := GetDataSnapWebModule;
  Result := Module.Request.RemoteIP + ': ' + Value;
end;

1
这就回答了如何从服务器类方法中访问TWebRequest对象的问题。我将标记为正确,但为了解析标题,我使用了这个解决方案以及这个答案来访问标题:https://dev59.com/cV7Va4cB1Zd3GeqPMbve。 - Joel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接