什么是 HttpContext.Current.Request.RawUrl 的 WCF 等效项?

Posted

技术标签:

【中文标题】什么是 HttpContext.Current.Request.RawUrl 的 WCF 等效项?【英文标题】:What is the WCF equivalent of HttpContext.Current.Request.RawUrl? 【发布时间】:2010-10-01 10:27:39 【问题描述】:

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

服务的 URL 在请求开始时使用 IHttpModule 重写(此时确实有 HttpContext 并使用 HttpContext.Current.RewritePath 重写它)以摆脱像 .svc 这样的东西URL 的扩展名。

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

【问题讨论】:

【参考方案1】:

您可以通过以下方式获取当前目标端点及其 Uri:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

我认为与以下内容相同:

OperationContext.Current.IncomingMessageHeaders.To

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

【讨论】:

【参考方案2】:

试试这样的:

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri

【讨论】:

根据问题标题的好答案(用谷歌搜索角度说) 我试过 System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri、OperationContext.Current.RequestContext.RequestMessage.Headers.To 和 OperationContext.Current.IncomingMessageHeaders.To,只有一个有效的是 OperationContext.Current.Channel.LocalAddress.Uri【参考方案3】:

我发现使用

OperationContext.Current.RequestContext.RequestMessage.Headers.To

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

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

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

【讨论】:

好点。还要注意UserHostAddress 的这个问题:***.com/q/650357/266535

以上是关于什么是 HttpContext.Current.Request.RawUrl 的 WCF 等效项?的主要内容,如果未能解决你的问题,请参考以下文章

时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?

什么是拉电流,什么是灌电流?什么是吸收电流 ?

在java中,OOA是什么?OOD是什么?OOP是什么?

什么是DIV,全称是什么?

什么是抢占/什么是可抢占内核?到底有什么好处呢?

什么是 JNDI?它的基本用途是什么?什么时候使用?