我正在撰寫一個 ISAPI DLL,使用 Delphi 10.4.2 和 IIS 10.
。配置、內容、請求-回應、除錯,都運行良好。
但是,我無法讀取請求的自定義頭檔案。這個測驗請求來自Postman。
在TWebModule1.WebModule1DefaultHandlerAction中,請求是繼承自Web.Win.IsapiHTTP.TISAPIRequest。
我使用了Web.Win.IsapiHTTP.TISAPIRequest.GetFieldByName()方法,正如Embarcadero檔案中提到的。
我在服務器端的組態檔中添加了<add name="Access-Control-Allow-Origin" value="*" /> 。
我覺得我錯過了什么。
例如,這個回傳的內容是空的,但是從我發送的客戶端來看,每個GetFieldByName都回傳一個空字串。
TWebModule1.WebModule1DefaultHandlerAction.
begin。
Response.statuscode := 200。
response.Content := Request.GetFieldByName('ic_Something')。
Handled := true;
結束。
uj5u.com熱心網友回復:
根據ISAPI服務器變數,在檢索自定義頭時,需要使用HEADER_<HeaderName>或HTTP_<HeaderName>:
| 變數[/th | 描述 |
|---|---|
| HEADER_<HeaderName> IIS 5.1及以前的版本。這個服務器變數是不可用的。 | 存盤在頭檔案<HeaderName>中的值。除了本表中列出的那些頭以外,任何頭都必須在前面加上 "HEADER_",以便服務器變數集合檢索其值。 注意:與HTTP_<HeaderName>不同,HEADER_<HeaderName>中的所有字符都被解釋為原樣。例如,如果你指定HEADER_MY_HEADER,服務器會搜索一個名為MY_HEADER的請求頭。 |
| HTTP_<HeaderName>/td> | 存盤在頭資訊<HeaderName>中的值。除了本表中列出的那些頭之外,任何頭都必須在前面加上 "HTTP_",以便ServerVariables集合能夠檢索到它的值。 注意:服務器將<HeaderName>中的任何下劃線(_)字符解釋為實際頭中的破折號。例如,如果你指定HTTP_MY_HEADER,服務器會搜索一個名為MY-HEADER的請求頭。 |
例如:
TWebModule1.WebModule1DefaultHandlerAction.
begin。
Response.statuscode := 200。
Response.Content := Request.GetFieldByName('HEADER_ic_Something')。
Handled := true;
end;
更新:顯然,GetFieldByName()已經為你尋找HTTP_<HeaderName>。 但是根據上面的檔案,這將搜索一個名為ic-Something的HTTP頭,而HEADER_ic_Something則將搜索ic_Something。 所以請使用更適合您的需求的那一個。
uj5u.com熱心網友回復:
要從ISAPI的請求中讀取所有的自定義頭資訊,你必須指定ALL_RAW為欄位名:
TWebModule1.WebModule1DefaultHandlerAction
var
CustomHeaders: string;
begin
CustomHeaders := Request.GetFieldByName('ALL_RAW')。
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/316489.html
標籤:
