在WCF REST服务中获取原始请求URL

时间:2012-02-02 10:06:22

标签: c# web-services rest

我要在我的WCF rest webservice中检索原始请求URL。现在我的代码看起来像这样:

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>

如果我的原始网址是

http://192.168.1.100:8081/test

此代码返回

http://hostname:8081/test

有没有办法检索确切的原始请求网址?

注意

我在web.config中找到了关于cutomize“baseAddress”标签的帖子,但是我的扩展名webservice没有特定的端点,我不想添加它。我不知道是否有办法没有端点。

我找到了这篇文章 https://stackoverflow.com/a/5915713/735864与System.Net.HttpRequestHeader.Host一起玩,但是端口号不起作用!我知道我可以解析提供的URL并进行替换但是......我不认为这是实现此目的的最佳实践。

2 个答案:

答案 0 :(得分:28)

System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.OriginalString;

这给出了原始URI。

答案 1 :(得分:5)

简短回答:var url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;

答案很长:见How to get the URL of the current page in C#

警告:仅当您在web.config文件中启用aspNetCompatibilityEnabled时才有效。