【发布时间】:2016-08-11 16:08:39
【问题描述】:
您知道如何在 TISAPIRequest 上手动添加自定义标头吗?
此类(或最通用的 TWebRequest)不公开 RawHeaders 属性以允许在需要时添加新的自定义标头。
PS:当我的 WebRequest 是 TIdHTTPAppRequest(Datasnap 独立服务器)时,我有一个肮脏的解决方案,因为那时我可以创建一个 Helper 类来访问其私有 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 添加自定义标头)?。
谢谢。
【问题讨论】: