如何从 Delphi MARS REST API库的端点资源函数中获取客户端的User-Agent?

mepcadol  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(93)

我已经在 Delphi 中用MARS REST Library构建了一个基本的API,我想知道是否有一种方法可以从资源函数中以某种方式获得连接到端点的客户端的User-Agent。什么是正确的“MARS”方式来做到这一点?
例如,我有以下代码:

type
  [Path('helloworld')]
  THelloWorldResource = class
  protected
  public
    [GET, Produces(TMediaType.TEXT_PLAIN)]
    function SayHelloWorld: string;
  end;

implementation

uses
  MARS.Core.Registry;

{ THelloWorldResource }

function THelloWorldResource.SayHelloWorld: string;
begin
  Result := 'Hello World!';
end;

字符串
如何从SayHelloWorld函数中获取User-Agent字符串?这可能吗
我基本上想知道每个端点的请求来自哪里,还想了解统计数据,以了解哪些用户代理设备在我的请求中最常见。我需要从服务器端获取,而不是从客户端通过端点主体或头端发送,因为任何人都可以从客户端修改User-Agent,甚至根本不发送。

ddrv8njm

ddrv8njm1#

IMARSRequest接口中有一个GetUserAgent函数,你可以使用它。IMARSRequest接口是MARS.Core.RequestAndResponse.Interfaces单元的一部分。
下面是您的代码,但是修改后使用上面提到的GetUserAgent函数获取User-Agent字符串:

type
  [Path('helloworld')]
  THelloWorldResource = class
  protected
    [Context] MarsRequest: IMARSRequest;
  public
    [GET, Produces(TMediaType.TEXT_PLAIN)]
    function SayHelloWorld: string;
  end;

implementation

uses
  MARS.Core.Registry;

{ THelloWorldResource }

function THelloWorldResource.SayHelloWorld: string;
begin
  var UserAgent := MarsRequest.GetUserAgent;
  Result := 'Hello, your User Agent String is: ' + sLineBreak + UserAgent;
end;

字符串
来显示代码的工作。以下是我从 Postman 那里得到的一个请求:
x1c 0d1x的数据
您好,您的用户代理字符串是:
PostmanRuntime/7.32.3
然后我用JavaScript从我的浏览器发出另一个请求,这是那里的响应:
您好,您的用户代理字符串是:
Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.82

相关问题