从URL获取主机域?


143

如何从字符串URL获取主机域?

GetDomain具有1个输入“ URL”,1个输出“ Domain”

例1

INPUT: http://support.domain.com/default.aspx?id=12345
OUTPUT: support.domain.com

例2

INPUT: http://www.domain.com/default.aspx?id=12345
OUTPUT: www.domain.com

范例3

INPUT: http://localhost/default.aspx?id=12345
OUTPUT: localhost

似乎问题出在URL中的主机,而不是主机的,除非我完全误解了“主机域”(而非“主机”)。答案符合Uri.Host的事实,即应该对问题进行更新,以更好地反映问题并与问题中所需的示例和接受的答案保持一致。
NoOneSpecial '19

Answers:


266

您可以使用Requestobject或Uriobject获取URL的宿主。

使用Request.Url

string host = Request.Url.Host;

使用Uri

Uri myUri = new Uri("http://www.contoso.com:8080/");   
string host = myUri.Host;  // host is "www.contoso.com"

2
嗨,我想使用Request.Url,但是Visual Studio仍然返回无法解析符号'Request'。我不知道怎么了。我使用Visual Studio 2010和Net Framework 4.0。有人可以解释症状吗?谢谢
Michal

1
您需要具有网页/服务中可用的“请求”对象,但默认情况下不位于该对象之后。如果您没有可用的Request对象,则可以Uri类
Adil 2016年

54

这样尝试;

Uri.GetLeftPart( UriPartial.Authority )

定义Uri.GetLeftPart方法的URI部分。


http://www.contoso.com/index.htm?date=today- > http://www.contoso.com

http://www.contoso.com/index.htm#main- > http://www.contoso.com

nntp://news.contoso.com/123456@contoso.com-> nntp://news.contoso.com

file://server/filename.ext-> file://服务器

Uri uriAddress = new Uri("http://www.contoso.com/index.htm#search");
Console.WriteLine("The path of this Uri is {0}", uriAddress.GetLeftPart(UriPartial.Authority));

Demo


28

使用Uri类并使用Host属性

Uri url = new Uri(@"http://support.domain.com/default.aspx?id=12345");
Console.WriteLine(url.Host);

15

尝试以下声明

 Uri myuri = new Uri(System.Web.HttpContext.Current.Request.Url.AbsoluteUri);
 string pathQuery = myuri.PathAndQuery;
 string hostName = myuri.ToString().Replace(pathQuery , "");

例1

 Input : http://localhost:4366/Default.aspx?id=notlogin
 Ouput : http://localhost:4366

例2

 Input : http://support.domain.com/default.aspx?id=12345
 Output: support.domain.com

如果myuri.PathAndQuery为“ /”则不起作用,只是将“ /”替换为“”
NDepend团队的Patrick

9

最佳方法和正确方法是使用Uri.Authority字段

像这样加载和使用Uri:

Uri NewUri;

if (Uri.TryCreate([string with your Url], UriKind.Absolute, out NewUri))
{
     Console.Writeline(NewUri.Authority);
}

Input : http://support.domain.com/default.aspx?id=12345
Output : support.domain.com

Input : http://www.domain.com/default.aspx?id=12345
output : www.domain.com

Input : http://localhost/default.aspx?id=12345
Output : localhost

如果要操纵Url,使用Uri对象是实现此目的的好方法。 https://msdn.microsoft.com/zh-CN/library/system.uri(v=vs.110).aspx


1

试试这个

Console.WriteLine(GetDomain.GetDomainFromUrl("http://support.domain.com/default.aspx?id=12345"));

它将输出support.domain.com

或尝试

Uri.GetLeftPart( UriPartial.Authority )


-2

WWW是别名,因此如果您要使用域,则不需要它。这是我的从字符串获取真实域的函数

private string GetDomain(string url)
    {
        string[] split = url.Split('.');
        if (split.Length > 2)
            return split[split.Length - 2] + "." + split[split.Length - 1];
        else
            return url;

    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.