【发布时间】:2013-09-23 12:42:02
【问题描述】:
在 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
【问题讨论】:
-
使用 ... WebOperationContext.Current.IncomingRequest.Headers
-
虽然技术上不是标头,但 WCF 会处理来自原始 HTTP 请求的内容,因此您将无法访问服务内的请求内容。但是,您可以在 OperationsHandler 中调用服务方法之前获取它
标签: c# wcf web-services