什么是HttpContext.Current.Request.RawUrl的WCF等价物?

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

服务的URL在请求开始时使用IHttpModule进行重写,该IHttpModule (此时有一个HttpContext并使用HttpContext.Current.RewritePath重写它)从URL中清除诸如.svc扩展名之类的内容。

但是,我需要访问WCF基础结构内请求的原始URL。 在任何地方的OperationContextWebOperationContext类上都有与HttpContext.Current.Request.RawUrl等效的东西吗? 使用WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri返回重写的URL,而不是原来的URL。


您可以通过执行以下操作获取目标终端和Uri:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

我认为这与以下相同:

OperationContext.Current.IncomingMessageHeaders.To

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


尝试这样的事情:

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri

我发现使用

OperationContext.Current.RequestContext.RequestMessage.Headers.To

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

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

System.ServiceModel.OperationContext.Current.IncomingMessageHeaders中的头对象并没有真正拥有客户端的所有头文件)

链接地址: http://www.djcxy.com/p/26889.html

上一篇: What is the WCF equivalent of HttpContext.Current.Request.RawUrl?

下一篇: Writeablebitmap reading in an asynchronous call