gpt4 book ai didi

http - 在 TISAPIRequest 上添加自定义 header (Delphi 10.1 Datasnap 服务器)

转载 作者:可可西里 更新时间:2023-11-01 17:06:33 27 4
gpt4 key购买 nike

您知道如何在 TISAPIRequest 上手动添加自定义 header 吗?

此类(或最通用的 TWebRequest)不公开 RawHeaders 属性以允许在需要时添加新的自定义 header 。

PS:当我的 WebRequest 是 TIdHTTPAppRequest(Datasnap 独立服务器)时,我有一个肮脏的解决方案,因为这样我就可以创建一个 Helper 类来访问它的私有(private) FRequestInfo 属性,并从那里获得对 RawHeaders 的访问权限,我可用于添加新标题。但是我只使用独立服务器进行开发和测试,生产环境必须在IIS服务器上运行。

TIdHTTPAppRequestHelper = class helper for TIdHTTPAppRequest
public
function GetRequestInfo: TIdEntityHeaderInfo;
end;

implementation

function TIdHTTPAppRequestHelper.GetRequestInfo: TIdEntityHeaderInfo;
begin
Result := FRequestInfo;
end;

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var Token: string;
begin
Response.SetCustomHeader('Access-Control-Allow-Origin','*');

Token := Request.Query;

if Copy(Token, 1, 10) = 'dssession=' then begin
if Request is TIdHTTPAppRequest then begin
TIdHTTPAppRequest(Request).GetRequestInfo.RawHeaders.AddValue('Pragma', Token);
end;
end;

if FServerFunctionInvokerAction <> nil then
FServerFunctionInvokerAction.Enabled := AllowServerFunctionInvoker;
end;

当 WebRequest 是 TISAPIRequest 而不是 THTTPAppRequest 时,可以编写类似的代码来获得相同的结果(向您的 WebRequest 添加自定义 header )?

谢谢。

最佳答案

TISAPIRequest有一个公共(public)ECB属性,它返回一个指向 ISAPI EXTENSION_CONTROL_BLOCK 的指针表示底层请求数据的结构。但是,ECB 不允许您以任何方式更改请求 header ,只能从中读取值。不过,您可以通过 ECB 设置自定义响应 header 。

我能找到的在 ISAPI 中添加/修改自定义请求 header 值的唯一方法是编写 ISAPI Filter DLL ,这超出了 TISAPIRequest 处理的范围。在 DLL 的导出内部 HttpFilterProc()函数,SF_NOTIFY_PREPROC_HEADERS 通知提供了一个 HTTP_FILTER_PREPROC_HEADERS包含指向 AddHeader() 的指针的结构和 SetHeader()用于添加/修改请求 header 值的函数。

关于http - 在 TISAPIRequest 上添加自定义 header (Delphi 10.1 Datasnap 服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38901343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com