2014-10-04 45 views
33

我想在asp.net c#中获取当前域名。如何在ASP.NET中获取当前域名

我正在使用此代码。

string DomainName = HttpContext.Current.Request.Url.Host; 

我的网址是localhost:5858但它仅返回localhost

现在,我在localhost中使用我的项目。我想获得本地主机:5858。

再如,当我使用这个域名

www.somedomainname.com 

我想somedomainname.com

请给我一个想法如何获取当前域名。

+1

主机名和域名是两个不同的东西。你想要一个映射到特定IP地址的域名,或者它所运行的机器的主机名? – 2014-10-04 05:33:11

+0

[ASP.NET中获取当前域的最佳方法是什么?](http://stackoverflow.com/questions/61817/whats-the-best-method-in-asp-net-to-obtain - 当前域) – Gitz 2014-10-04 05:49:08

回答

36

使用Request.Url.Host是合适的 - 它是如何获得的HTTP Host:头,指定哪个主机名(域名)UA(浏览器)的值因为HTTP请求的资源路径部分不包含主机名。

请注意,localhost:5858不是域名,它是一个端点说明符,也称为“权威”,其中包括主机名和TCP端口号。这通过访问Request.Uri.Authority来检索。

此外,它是无效的,从www.somedomain.com得到somedomain.com因为web服务器可以配置以服务为www.somedomain.com不同的网站相比somedomain.com,但是如果你确定这是你的情况下,有效的,那么你需要手动解析主机名,虽然使用String.Split('.')工作在一个捏。

请注意,Web服务器(IIS)配置与ASP.NET的配置和ASP不同。NET实际上完全不知道它运行的网站和Web应用程序的HTTP绑定配置。 IIS和ASP.NET共享相同的配置文件(web.config)的事实是一个红鲱鱼。

34

尝试获得URL的“左部”,像这样:

string DomainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); 

这会给你两个“本地主机:5858”和“www.somedomainname.com”。如果你想放弃WWW,你应该配置IIS(我不知道该怎么做)。

参见:

Request.Url.GetLeftPart(UriPartial.Authority);

Request.RequestUri.GetLeftPart(UriPartial.Authority);

都返回,例如:http://localhost:60333/

+2

这应该是我认为的最佳答案。 – Andrew 2016-07-08 21:07:40

16

你可以试试下面的代码:

Request.Url.Host + 
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port) 
1

HttpContext.Current.Request.Url.Host将返回正确的值。如果你在www.somedomainname.com上运行它,它会给你www.somedomainname.com。如果你想获得的5858,以及你需要使用

HttpContext.Current.Request.Url.Port 
4

www.somedomain.com该域/主机。子域是一个重要的部分。 www.通常可以互换使用,没有一个,但是必须按照规则进行设置(即使它是默认设置),因为它们不相同。想想另一个子域,如mx.。这可能与www.有不同的目标。

鉴于此,我建议不要这样做。这就是说,既然你问我想象你有一个很好的理由。

就我个人而言,我建议为此特殊套管www.

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);; 

if (host.StartsWith("www.")) 
    return host.Substring(4); 
else 
    return host; 

否则,如果你真的100%肯定要砍掉任何子域,你需要的东西一点点更加复杂。

string host = ...; 

int lastDot = host.LastIndexOf('.'); 

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.'); 

if (secondToLastDot > -1) 
    return host.Substring(secondToLastDot + 1); 
else 
    return host; 

获取端口就像其他人所说的。

2

Request.ServerVariables对象适用于我。我不知道有什么理由不使用它。

ServerVariables["SERVER_NAME"]ServerVariables["HTTP_URL"]应该让你在找什么

29

这里是Request.RequestUri截图和大家的参考其所有属性。

enter image description here

0

你可以试试下面的代码来获得完全合格的域名:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 
+4

虽然此代码片段可能会解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – 2017-10-26 07:58:10

相关问题