如何在 WCF Web 服务中读取 HTTP 请求标头

本文关键字:HTTP 读取 请求 服务 WCF Web | 更新日期: 2023-09-27 18:31:45

在WCF Web服务中,如何读取HTTP/HTTPS请求标头?在这种情况下,我正在尝试确定客户端使用的原始 URL 主机。这可能位于负载均衡器的 X 转发主机标头中,或者位于 Host 标头中(如果是直接框)。

我已经尝试过OperationContext.Current.IncomingMessageHeaders.FindHeader但我认为这是在查看 SOAP 标头而不是 HTTP 标头。

那么,如何读取HTTP标头呢?当然,这是一个简单的问题,我错过了一些明显的东西。

编辑 - @sinfere的答案几乎正是我所需要的。为了完整起见,这是我最终得到的:

IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;
string host = null;
if (headers["X-Forwarded-Host"] != null)
    host = headers["X-Forwarded-Host"];
else if (headers["Host"] != null)
    host = headers["Host"];
else 
    host = defaulthost; // set from a config value

如何在 WCF Web 服务中读取 HTTP 请求标头

尝试WebOperationContext.Current.IncomingRequest.Headers

我使用以下代码来查看所有标头:

IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
WebHeaderCollection headers = request.Headers;
Console.WriteLine("-------------------------------------------------------");
Console.WriteLine(request.Method + " " + request.UriTemplateMatch.RequestUri.AbsolutePath);
foreach (string headerName in headers.AllKeys)
{
  Console.WriteLine(headerName + ": " + headers[headerName]);
}
Console.WriteLine("-------------------------------------------------------");

这就是我在某个 Azure WCF Web 服务中读取它们的方式。

IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;
string applicationheader = woc.Headers["HeaderName"];