获取URI的一部分



说我有此代码:

Uri uri = new Uri("www.xx.yy.co.uk/folder/whatever.html");

如何从C#中的Uri获取xxyyco.uk?我几乎尝试了Uri类的每个属性,但没有找到任何相关的内容。

请注意,例如,comco.uk都是单个字符串。

您发现Instroult System.URI不会打破URL的各种顶级(主机/域)部分。您要求的解析类型是非常具体的,因为.com.co.uk不是URL中的等效组件(.com和.uk)。

自己做这件事的两种简单方法是:

  • 修改已建立的正则是解析URI Host属性中持有的URL,并使用正则命名为captures(组)以方便地提取部分。

  • 通过创建自己从中继承的system.uri类,并引入一种以您想要的特定方式分解URL的方法。

问题在于,有一个很大的"伪顶级域"列表,例如co.uk,wakayama.jp或edu.cn,甚至是"顶级"域",三个部分。C#中的所有列表都没有内置列表,因此我看到的最好的解决方案是指定您期望和分开的解决方案,如下所示:

List<string> parts = null;
Uri uri = new Uri("http://www.xx.yy.co.uk/folder/whatever.html");
string s = uri.Host;
string[] twoLevelDomains = { "co.uk", "edu.cn" };
foreach(var twoLevelDomain in twoLevelDomains)
{
    if (s.EndsWith(twoLevelDomain))
    {
        parts = s.Replace("." + twoLevelDomain, "").Split('.').ToList();
        parts.Add(twoLevelDomain);
    }
}
if(parts == null) {
    parts = s.Split('.').ToList();
}

背景:唯一的官方顶级领域只是.uk等一部分。这里提供了所有"伪顶级域"的全面列表:https://wiki.mozilla.org/tld_list。虽然这是一个大列表,但它似乎并不全面,因为许多国家仅列出了一个顶级领域,并且有"(其他?)"等领域。

这将适用于此问题。检查数组元素:

 Uri uri = new Uri("http://www.xx.yy.co.uk/folder/whatever.html");
 string abs = uri.AbsoluteUri;
 char[] splitChar = { '.' };
 var nodesArray = abs.Split(splitChar).ToArray();

最新更新