2014-10-18 112 views
3

我需要从任何网址提取确切的域名。从URl获取域名

例如,

这是我曾试图迄今没有返回我期待着任何一个可以帮助我在这里

public static string GetDomainName(string domainURL) { 
      string domain = new Uri(domainURL).DnsSafeHost.ToLower(); 
      var tokens = domain.Split('.'); 
      if (tokens.Length > 2) 
      { 
       //Add only second level exceptions to the < 3 rule here 
       string[] exceptions = { "info", "firm", "name", "com", "biz", "gen", "ltd", "web", "net", "pro", "org" }; 
       var validTokens = 2 + ((tokens[tokens.Length - 2].Length < 3 || exceptions.Contains(tokens[tokens.Length - 2])) ? 1 : 0); 
       domain = string.Join(".", tokens, tokens.Length - validTokens, validTokens); 
      } 
      return domain; 
    } 

回答

3

使用的系统命名空间中的URI类的确切结果

Uri myUri = new Uri("http://www.something.com/"); 

它有属性,如主机这应该让你想要你需要...

0

这是代码提取t他使用Uri班,然后把你想要的部分放回到一起。

但是,它似乎好像你特别想要“www。”部分删除,所以我扔了一个字符串替换。

Uri MyUri = new Uri(domainURL); 

string Result = MyUri.GetLeftPart(UriPartial.Scheme); 

Result += MyUri.GetComponents(UriComponents.Host, UriFormat.SafeUnescaped).Replace("www.", string.Empty); 

return Result; 
1

请试试这个代码:

public string GetDomainName(string domainURL) 
{ 
    string domain = new Uri(domainURL).DnsSafeHost.ToLower(); 
    domain = domainURL.Split(':')[0] + "://" + domain; 
    return domain; 
} 

我想你应该分裂,并从字符串的开始让协议并追加到域。如果您通过任何URL没有协议如http://代码new Uri()方法会抛出错误。

所以,我认为代码domainURL.Split(':')[0] + "://" + domain;将为你工作。

请使用您的建议输入进行测试。

0

试试这个:

 Uri myUri = new Uri("http://www.something.subdomain.com"); 
     string host = myUri.Host; 

主机是你在找什么。