Что такое WCF-эквивалент HttpContext.Current.Request.RawUrl? - PullRequest
34 голосов
/ 14 января 2009

У меня есть некоторые службы 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, а не исходный.

Ответы [ 3 ]

40 голосов
/ 05 февраля 2009

Вы можете получить конечную точку в настоящее время и Uri для него, выполнив:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

что я думаю, это то же самое, что и

OperationContext.Current.IncomingMessageHeaders.To

Это System.Uri объект, и я считаю, что вы можете просто получить OriginalString или PathAndQuery, или любые другие части, которые вы хотите от него.

2 голосов
/ 07 марта 2013

попробуйте что-то вроде этого:

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri
1 голос
/ 30 июня 2015

Я обнаружил, что используя

OperationContext.Current.RequestContext.RequestMessage.Headers.To

работает большую часть времени, но не для моего приложения. Он находится за NLB (Network Load Balancer), что приводит к потере исходного имени хоста ввода. Но входной хост все еще находится в заголовке с именем "Host", что было на удивление трудно получить. Он расположен по адресу:

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

(объекты заголовка в System.ServiceModel.OperationContext.Current.IncomingMessageHeaders действительно не имели всех заголовков от клиента)

...