如何在 Web API 操作上获取子域

How to get Sub Domain on Web API Action

我正在开发 Classified Web Site。该网站有很多子域,如 dubai.sitedomain.comlondon.sitedomain.comnewyork.sitedomain.com 等,具体取决于城市。我使用 Angularjs 作为前端,Web Api 作为服务器端。

我的要求是我想在我的 Web Api Action 上获得 subdomain。喜欢:

    [HttpGet]
    [Route("GetAds")]
    public IHttpActionResult GetAds()
    {
        // Here I want to know, from which subdomain the request has been sent
        // so I can filter my ads according to the city
        var city = "city from subdomain";
        var list = _adService.GetAdsByCity(city);

        return Ok(list);
    }

您可以从

中提取它
var x = Request.Host.Value;

哪个会给你"london.sitedomain.com:port"

然后你可以做一个

x.Split('.')[0] //(for example)

获取子域

使用Request.Headers.Referrer.Host.Replace(".sitedomain.com", string.Empty);

当然这只适用于您的实时环境,因此您可能需要修改它以在您的本地测试域上以不同方式工作,或提供某种默认回退。我建议将其提取到公共库中的方法中,因为您可能会在很多地方需要它。

或者,如果您知道它永远是第一部分,您可以使用

Request.Headers.Referrer.Host.Substring(0, Request.Headers.Referrer.Host.IndexOf("."));

这应该可以满足您的需求。

HttpContext.Current.Request.UserHostAddress;
HttpContext.Current.Request.UserAgent;
HttpContext.Current.Request.Url.OriginalString;

还有:

Request.Url.Scheme
Request.Url.Authority
Request.ApplicationPath

您可以从 HttpRequestMessage.RequestUri.Host:

获取主机
string host = Request.RequestUri.Host;
int index = host.IndexOf('.');

return host.Substring(0, index + 1)