2013-06-11 4 views
0

Есть ли какой-либо класс-метод для проверки того, являются ли два URL-адреса, которые отличаются в корпусе, одинаковы?Сравнить Урл чувствителен к регистру

это те же:

  1. www.mysite.com
  2. Www.MYsite.COm

это не то же самое:

  1. www.youtube. com/v = AAAABBBB
  2. www.youtube.com/v=aaaaBBBB

EDIT Я не думаю, что Ури класс достаточно

эти два являются те же ссылки

  1. stackoverflow.com/questions
  2. stackoverflow.com/QUESTIONS
+1

класс 'Uri' разрушает все это. Просто выберите нужные предметы и сравните их. –

+1

Осторожно: в то время как stackoverflow.com/questions и stackoverflow.com/QUESTIONS могут перенаправляться на один и тот же ресурс, это не так в общем случае. Путь на сервере может быть чувствителен к регистру. – nodots

ответ

1

Примечание что www.youtube.com/v=ObgtZwwiKqg является неправильным URL. Правильный URL-адрес содержит символ запроса, например. www.youtube.com/watch?v=ObgtZwwiKqg.

Как игнорировать путь до запроса и только сравнить параметры запроса? Если в ваших URL-адресах есть запрос ?, вы можете удалить все до запроса. Если нет, вы можете по крайней мере удалить домен с помощью UriPartial.Authority.

Например:

Uri a = new Uri("http://www.google.com/subdirectory?v=aaBB"); 
Uri b = new Uri("http://www.Google.com/SUBdirectory?v=AAbb"); 

string aParams = a.ToString().Replace(a.GetLeftPart(UriPartial.Path), String.Empty); 
string bParams = b.ToString().Replace(b.GetLeftPart(UriPartial.Path), String.Empty); 
if (aParams.Equals(bParams)) // with case 
{ 
    // they are equal 
} 
+1

[Лучшие практики] (http://msdn.microsoft.com/en-us/library/dd465121 (v = vs.110) .aspx # рекомендации_for_string_usage) рекомендуют использовать 'String.Equals' для сравнения равенства вместо сравнения вернуть значение 'String.Compare' к нулю. – vvnurmi

0

нужно использовать класс Uri, а также проверить свойство AbsolutePath

string url1 = "http://www.youtube.com/v=AAAABBBB"; 
string url2 = "http://www.youtube.com/v=aaaaBBBB"; 

Uri u1 = new Uri(url1); 
Uri u2 = new Uri(url2); 

if(string.Compare(u1.Host, u2.Host, StringComparison.CurrentCultureIgnoreCase) == 0) 
{ 
    if(u1.AbsolutePath == u2.AbsolutePath) 
     Console.WriteLine("Equals"); 
    else 
     Console.WriteLine("Not equal path"); 
} 
else 
    Console.WriteLine("Not equal host");