关于c#:在WCF REST服务中获取原始请求URL

Get original request url in WCF REST service

我必须在wcf rest webservice中检索原始请求URL。现在我的代码如下:

1
2
3
4
5
6
7
8
public class MyServiceAuthorizationManager : ServiceAuthorizationManager
{
    protected override bool CheckAccessCore(OperationContext operationContext)
    {
        base.CheckAccessCore(operationContext);

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

Web.CONFIG

1
2
3
4
5
6
7
8
<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
      <standardEndpoints>
         <webHttpEndpoint>
             <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

如果我的原始URL是

http://192.168.1.100:8081/测试

此代码返回

http://hostname:8081/测试

是否有方法检索准确的原始请求URL?

注释

我在web.config中发现了一些文章谈论的是剪切"baseaddress"标记,但是我的扩展webservice没有特定的端点,我不想添加它。我不知道是否有一种方法可以做到没有终点。

我找到了这个帖子https://stackoverflow.com/a/5915713/735864与system.net.httprequestader.host一起使用,但端口号不起作用!我知道我可以解析提供的URL并进行替换,但是…我不认为这是实现这一目标的最佳实践。


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

这将提供原始的URI。


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

长答案:请参阅如何在C中获取当前页面的URL。

警告:仅当在web.config文件中启用aspnetcompatibilityEnabled时,此操作才有效。