Get original request url in WCF REST service

2020-02-10 14:45发布

I've to retrieve the orginal request url in my WCF rest webservice. Now my code looks like this:

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>

if my original url is

http://192.168.1.100:8081/test

this code return

http://hostname:8081/test

is there a way to retrieve the exact original request url?

Note

I found posts talking about cutomize "baseAddress" tag in web.config but I've no specific endpoint fom my extensionles webservice and I don't want to add it. I don't know if there is a way to do it without endpoint.

I found this post https://stackoverflow.com/a/5915713/735864 plays with System.Net.HttpRequestHeader.Host but with port number it doesn't works! I know I can parse provided url and do a Replace but... I don't think this is the best practice to achieve this.

2条回答
走好不送
2楼-- · 2020-02-10 15:20

Short answer: var url = System.Web.HttpContext.Current.Request.Url.AbsoluteUri;

Long answer: See How to get the URL of the current page in C# .

Warning: This only works if you enable aspNetCompatibilityEnabled in web.config file.

查看更多
forever°为你锁心
3楼-- · 2020-02-10 15:29
System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.OriginalString;

This gives the original URI.

查看更多
登录 后发表回答