C# 从任何URL获取准确的域名

C# 从任何URL获取准确的域名,c#,dns,uri,tld,C#,Dns,Uri,Tld,我需要从任何Url中提取准确的域名 比如说, Url:-->域名:google.com Url:-->域名:google.co.uk 在c#中这怎么可能?该任务是否有完整的TLD列表或解析器?您可以使用访问URI的所有组件: var uri = new Uri("http://www.google.co.uk/path1/path2"); var host = uri.Host; // host == "www.google.co.uk" 但是,没有内置的方法将子域“www”从“www.

我需要从任何Url中提取准确的域名

比如说,

Url:-->域名:google.com

Url:-->域名:google.co.uk

在c#中这怎么可能?该任务是否有完整的TLD列表或解析器?

您可以使用访问URI的所有组件:

var uri = new Uri("http://www.google.co.uk/path1/path2");

var host = uri.Host;

// host == "www.google.co.uk"

但是,没有内置的方法将子域“www”从“www.google.co.uk”中剥离出来。您需要实现自己的逻辑,例如

var parts = host.ToLowerInvariant().Split('.');

if (parts.Length >= 3 &&
    parts[parts.Length - 1] == "uk" &&
    parts[parts.Length - 2] == "co")
{
    var result = parts[parts.Length - 3] + ".co.uk";

    // result == "google.co.uk"
}

尝试System.Uri类

返回“www.google.co.uk”。从这里开始就是字符串操作/

使用:

var uri =new Uri(Request.RawUrl); // to get the url from request or replace by your own
var domain = uri.GetLeftPart( UriPartial.Authority );
输入:

Url = http://google.com/?search=true&q=how+to+use+google
http://www.stackoverflow.com/questions/5984361/c-sharp-getting-exact-domain-name-from-any-url?s=45faab89-43eb-41dc-aa5b-8a93f2eaeb74#new-answer
结果:

domain = google.com 
使用:

输入:

Url = http://google.com/?search=true&q=how+to+use+google
http://www.stackoverflow.com/questions/5984361/c-sharp-getting-exact-domain-name-from-any-url?s=45faab89-43eb-41dc-aa5b-8a93f2eaeb74#new-answer
输出:

stackoverflow.com
也适用于以下方面

→ 谷歌网站

→ google.co.uk

→ localhost.intranet:88


→ www2.google.com

另一个没有依赖项的变体:

string GetDomainPart(string url)
{
    var doubleSlashesIndex = url.IndexOf("://");
    var start = doubleSlashesIndex != -1 ? doubleSlashesIndex + "://".Length : 0;
    var end = url.IndexOf("/", start);
    if (end == -1)
        end = url.Length;

    string trimmed = url.Substring(start, end - start);
    if (trimmed.StartsWith("www."))
        trimmed = trimmed.Substring("www.".Length );
    return trimmed;
}
示例:

http://www.google.com → google.com

http://www.google.co.uk/path1/path2 → google.co.uk

http://localhost.intranet:88/path1/path2 → localhost.intranet:88


http://www2.google.com → www2.google.com

不工作,RawUrl不返回.comaddress@Nick:查看下一行,我使用了您的全部代码。此解决方案可能在过去有效,但在.net 4中不起作用。它将不起作用,
new Uri(“http://www.google.comGetLeftPart(UriPartial.Authority)。替换(“http:/”,“”)≡ “www.google.com”
见更新版。感谢您的注意。对于不同的方案,您可以这样使用:uriuri=newuri(url);string domain=uri.GetLeftPart(UriPartial.Authority).Replace(“/www.”,“/”).Replace(uri.GetLeftPart(UriPartial.Scheme),”);