34

我有一些在纯 WCF 上下文中运行的 RESTful 服务(即未启用 ASP.NET 兼容性,因此没有HttpContext.Current可用的对象)。

服务的 URL 在请求开始时使用 an IHttpModule(此时确实有 anHttpContext并使用 重写它HttpContext.Current.RewritePath)重写,以摆脱.svcURL 中的扩展等内容。

但是,我需要访问从 WCF 基础结构中请求的原始 URL。HttpContext.Current.Request.RawUrl任何地方的OperationContext或类上是否有等价物WebOperationContext?使用WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri返回重写的 URL,而不是原始 URL。

4

3 回答 3

40

您可以通过执行以下操作获取当前目标的端点及其 Uri:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

我认为与以下内容相同:

OperationContext.Current.IncomingMessageHeaders.To

这是一个System.Uri对象,我相信您可以从中获得OriginalStringorPathAndQuery或任何您想要的部分。

于 2009-02-05T19:06:54.770 回答
2

尝试这样的事情:

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri
于 2013-03-07T13:49:35.880 回答
1

我发现使用

OperationContext.Current.RequestContext.RequestMessage.Headers.To

大部分时间都有效,但不适用于我的应用程序。它位于 NLB(网络负载均衡器)后面,这会导致它丢失原始输入主机名。但是输入主机仍然在一个名为“主机”的标题中,这令人惊讶地难以获取。它位于:

System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]

System.ServiceModel.OperationContext.Current.IncomingMessageHeaders的标头对象并没有真正拥有来自客户端的所有标头)

于 2015-06-29T21:55:28.650 回答