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

时间:2013-09-18 16:31:40

标签: c# wcf web-services

在WCF Web服务中,如何读取HTTP / HTTPS请求标头?在这种情况下,我正在尝试确定客户端使用的原始URL主机。这可能位于负载均衡器的X-Forwarded-Host标头中,如果是直接框,则位于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

2 个答案:

答案 0 :(得分:45)

尝试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("-------------------------------------------------------");

答案 1 :(得分:23)

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

IncomingWebRequestContext woc = WebOperationContext.Current.IncomingRequest;

string applicationheader = woc.Headers["HeaderName"];