从任何URL获取确切的域名

Yaz*_*ati 24 c# dns uri tld

我需要从任何网址中提取确切的域名.

例如,

网址:http://www.google.com - >域名:google.com

网址:http://www.google.co.uk/path1/path2 - >域名:google.co.uk

怎样才能在c#中实现?是否有完整的TLD列表或该任务的解析器?

dtb*_*dtb 31

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

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

var host = uri.Host;

// host == "www.google.co.uk"
Run Code Online (Sandbox Code Playgroud)

但是,没有内置的方法可以将子域名"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"
}
Run Code Online (Sandbox Code Playgroud)


mik*_*mes 16

使用:

new Uri("http://www.stackoverflow.com/questions/5984361/c-sharp-getting-exact-domain-name-from-any-url?s=45faab89-43eb-41dc-aa5b-8a93f2eaeb74#new-answer").GetLeftPart(UriPartial.Authority).Replace("/www.", "/").Replace("http://", ""));
Run Code Online (Sandbox Code Playgroud)

输入:

http://www.stackoverflow.com/questions/5984361/c-sharp-getting-exact-domain-name-from-any-url?s=45faab89-43eb-41dc-aa5b-8a93f2eaeb74#new-answer
Run Code Online (Sandbox Code Playgroud)

输出:

stackoverflow.com
Run Code Online (Sandbox Code Playgroud)

也适用于以下.

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


Cra*_*ste 7

试试System.Uri类.

http://msdn.microsoft.com/en-us/library/system.uri.aspx

new Uri("http://www.google.co.uk/path1/path2").Host
Run Code Online (Sandbox Code Playgroud)

返回"www.google.co.uk".从那里它是字符串操纵.:/