У меня есть некоторые службы RESTful, работающие в чистом контексте WCF (т.е. совместимость с ASP.NET не включена, и поэтому объект HttpContext.Current недоступен).
URL-адреса служб перезаписываются в начале запроса с использованием IHttpModule (который на тот момент действительно имеет HttpContext и перезаписывает его с помощью HttpContext.Current.RewritePath), чтобы избавиться от таких вещей, как расширение .svc из URL-адреса.
Однако мне нужно получить доступ к исходному URL-адресу, который был запрошен из инфраструктуры WCF. Есть ли где-нибудь эквивалент HttpContext.Current.Request.RawUrl в классах OperationContext или WebOperationContext? Использование WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri возвращает переписанный URL, а не исходный.





Вы можете получить текущую намеченную конечную точку и Uri для нее, выполнив следующие действия:
OperationContext.Current.RequestContext.RequestMessage.Headers.To
что, я думаю, то же самое, что:
OperationContext.Current.IncomingMessageHeaders.To
Это объект System.Uri, и я считаю, что вы можете просто получить от него OriginalString или PathAndQuery или любые другие части, какие захотите.
попробуйте что-то вроде этого:
OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri
Я попробовал System.ServiceModel.Web.WebOperationContext.Current.Incoming Request.UriTemplateM atch.RequestUri, OperationContext.Current.RequestContext.RequestMessage.Heade rs.To и OperationContext.Current.IncomingMessageHeaders.To, единственный, который работает, это OperationContext.Current.Channel.LocalAddress.Uri
Я обнаружил, что с помощью
OperationContext.Current.RequestContext.RequestMessage.Headers.To
работает наиболее того времени, но не для моего приложения. Он находится за NLB (балансировщиком сетевой нагрузки), из-за чего он теряет исходное имя хоста ввода. Но входной хост все еще находится в заголовке с именем «Host», что было на удивление трудно добраться. Он находится по адресу:
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]
(объекты заголовков в System.ServiceModel.OperationContext.Current.IncomingMessageHeaders действительно не имели всех заголовков от клиента)
Хорошая точка зрения. Также обратите внимание на эту проблему с UserHostAddress: stackoverflow.com/q/650357/266535
Хороший ответ в соответствии с названием вопроса (с точки зрения поиска Google)