Получить исходный URL-адрес запроса в службе WCF REST - PullRequest
13 голосов
/ 02 февраля 2012

Мне нужно получить исходный URL-адрес в моем веб-сервисе WCF rest. Теперь мой код выглядит так:

public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {
        base.CheckAccessCore(operationContext);

        var url = operationContext.IncomingMessageProperties.Via.OriginalString;
        ...

web.config

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
      <standardEndpoints> 
         <webHttpEndpoint>
             <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

если мой исходный URL-адрес

http://192.168.1.100:8081/test

этот код возврата

http://hostname:8081/test

есть ли способ получить точный исходный URL-адрес запроса?

Примечание

Я нашел сообщения, рассказывающие о теге cutomize "baseAddress" в web.config, но у меня нет конкретной конечной точки для моего веб-сервиса extensionles, и я не хочу его добавлять. Я не знаю, есть ли способ сделать это без конечной точки.

Я нашел это сообщение https://stackoverflow.com/a/5915713/735864 играет с System.Net.HttpRequestHeader.Host, но с номером порта не работает! Я знаю, что могу разобрать предоставленный URL и выполнить замену, но ... я не думаю, что это лучшая практика для достижения этой цели.

Ответы [ 2 ]

28 голосов
/ 18 сентября 2012
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.OriginalString;

Это дает исходный URI.

5 голосов
/ 30 апреля 2012

Краткий ответ: var url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;

Длинный ответ: см. Как получить URL текущей страницы в C # .

Предупреждение. Это работает только при включении aspNetCompatibilityEnabled в файле web.config.

...