如何在ASP.NET中获取当前域名

时间:2014-10-04 05:24:31

标签: c# asp.net

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

我正在使用此代码。

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

我的网址为localhost:5858,但它只返回localhost

现在,我在localhost中使用我的项目。我想得到localhost:5858。

另一个例子,当我使用这个域

www.somedomainname.com

我想获得somedomainname.com

请告诉我如何获取当前域名。

12 个答案:

答案 0 :(得分:63)

尝试获取网址的“左侧部分”,如下所示:

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

这将为您提供http://localhost:5858https://www.somedomainname.com,无论您是本地还是制作。如果要删除www部分,则应配置IIS以执行此操作,但这是另一个主题。

请注意,生成的网址不会有斜杠。

答案 1 :(得分:54)

使用Request.Url.Host是合适的 - 它是如何检索HTTP Host:标头的值,它指定UA(浏览器)想要的主机名(域名),作为资源路径的一部分。 HTTP请求不包含主机名。

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

此外,从somedomain.com获取www.somedomain.com无效,因为与www.somedomain.com相比,可以将网络服务器配置为提供somedomain.com的其他网站,但是如果您确保这在你的情况下是有效的,然后你需要手动解析主机名,尽管使用String.Split('.')可以解决这个问题。

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

答案 2 :(得分:39)

以下是Request.RequestUri及其所有属性的屏幕截图,供大家参考。

enter image description here

答案 3 :(得分:16)

您可以尝试以下代码:

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

答案 4 :(得分:5)

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;

获得端口就像其他人说的那样。

答案 5 :(得分:2)

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

ServerVariables["SERVER_NAME"]ServerVariables["HTTP_URL"]应该可以获得您正在寻找的内容

答案 6 :(得分:1)

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

HttpContext.Current.Request.Url.Port 

答案 7 :(得分:1)

您可以尝试以下代码来获取完全限定的域名:

fun testA(str: String, listner: java.util.function.Function<String, Void?>) {
...
}

testA(("hello") { lstr ->
    print(lstr)
    null
}

答案 8 :(得分:1)

这是一个快速简单的方法来获取网址的名称。

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }

答案 9 :(得分:0)

尝试一下:

@ Request.Url.GetLeftPart(UriPartial.Authority)

答案 10 :(得分:0)

即使在子域www.somedomain.com/subdomain下,也要在MVC中获取基本URL:

var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";

答案 11 :(得分:0)

我在asp.net core 3.1中像这样使用它

 var url =Request.Scheme+"://"+ Request.Host.Value;