2015-03-20 3 views
0

Целью здесь является знать, является ли данный URL-адрес в данном домене.Как получить доменное имя от URL-адреса

Например, мой домен: www.google.fr мне нужно знать, если это: http://token.google.fr/news/something в области

У меня есть HashSet Ури со всеми URL мне нужно, чтобы проверить и мой домен также в объекте Uri.

Есть ли способ сделать это, манипулируя объектом Uri?

Я попытался сравнить и Uri.Authority, но так как у нас может быть префикс и/или суффикс, Uri.Compare() неприменим.

+0

Возможный дубликат [Получить только доменное имя из URL?] (Http://stackoverflow.com/questions/2154167/get-just-the-domain-name-from-a-url) – cubrr

ответ

1

Вы можете разделить Uri.Authority и проверить TLD и доменное имя, которое всегда должно быть два последних элемента раскола (при условии, что это действительный URL)

Пример

Uri uri1 = new Uri("http://test.google.ca/test/test.html"); 
Uri uri2 = new Uri("http://google.ca/test/test.html"); 

string[] uri1Parts = uri1.Authority.Split(new char[] { '.' }); 
string[] uri2Parts = uri2.Authority.Split(new char[] { '.' }); 

//Check the TLD and the domain 
if (uri1Parts[uri1Parts.Length - 1] == uri2Parts[uri2Parts.Length - 1] && uri1Parts[uri1Parts.Length - 2] == uri2Parts[uri2Parts.Length - 2]) 
{ 
    Console.WriteLine(uri1Parts[uri1Parts.Length - 2] + "." + uri1Parts[uri1Parts.Length - 1]); 
} 

Редактировать

Если ваши URI имеют порты, вам необходимо их учитывать. Вот немного лучше.

public static bool AreSameDomain(Uri uri1, Uri uri2) 
{ 
    string uri1Authority = uri1.Authority; 
    string uri2Authority = uri2.Authority; 

    //Remove the port if port is specified 
    if (uri1Authority.IndexOf(':') >= 0) 
    { 
     uri1Authority = uri1Authority.Substring(0, uri1Authority.IndexOf(':')); 
    } 
    if (uri2Authority.IndexOf(':') >= 0) 
    { 
     uri2Authority = uri1Authority.Substring(0, uri2Authority.IndexOf(':')); 
    } 

    string[] uri1Parts = uri1Authority.Split(new char[] { '.' }); 
    string[] uri2Parts = uri2Authority.Split(new char[] { '.' }); 

    return (uri1Parts[uri1Parts.Length - 1] == uri2Parts[uri2Parts.Length - 1] //Checks the TLD 
     && uri1Parts[uri1Parts.Length - 2] == uri2Parts[uri2Parts.Length - 2]); //Checks the Domain Name 
} 
0

я мог быть полностью недоразумение, что вы пытаетесь сделать, но это было бы полезно:

Uri u1 = new Uri("http://token.google.fr/news/something"); 
Uri u2 = new Uri("http://www.google.fr"); 

string domain1 = u1.Authority.Substring(u1.Authority.IndexOf('.') + 1); 
string domain2 = u2.Authority.Substring(u2.Authority.IndexOf('.') + 1); 

Праведный сравнить две строки «domain1» и «домен2».

Смежные вопросы