Что такое WCF-эквивалент HttpContext.Текущий.Запрос.RawUrl?
У меня есть несколько служб RESTful, работающих в чистом контексте WCF (т. е. ASP.NET совместимость не включена, и, следовательно, Объект HttpContext.Current
недоступен).
Url-адреса служб переписываются в начале запроса с помощью IHttpModule
(который в этот момент имеет HttpContext
и переписывает его с помощью HttpContext.Current.RewritePath
), Чтобы избавиться от таких вещей, как расширение .svc
из URL.
HttpContext.Current.Request.RawUrl
на классах OperationContext
или WebOperationContext
? Using WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri
возвращает переписанный URL, а не исходный.3 ответа:
Вы можете получить конечную точку, которая в данный момент является целевой, и Uri для нее, выполнив следующие действия:
OperationContext.Current.RequestContext.RequestMessage.Headers.To
Что, по-моему, то же самое, что:
OperationContext.Current.IncomingMessageHeaders.To
Это объект
System.Uri
, и я считаю, что вы можете просто получитьOriginalString
илиPathAndQuery
, или любые другие части, которые вы хотите от него.
Я обнаружил, что с помощью
OperationContext.Current.RequestContext.RequestMessage.Headers.To
Работаетбольшую часть времени, но не для моего приложения. Он находится за балансировщиком сетевой нагрузки (NLB), что приводит к потере исходного имени узла ввода. но входной хост по-прежнему находится в заголовке с именем "хост", до которого было удивительно трудно добраться. Он расположен по адресу:
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]
(заголовочные объекты в системе .Модель обслуживания.OperationContext.Текущий.IncomingMessageHeaders на самом деле не все заголовки из клиент)