2013-08-20 18 views
7

Chcę porównać 2 adresy URL. Jaki jest najlepszy sposób na zrobienie tego?Najlepszy sposób na porównanie 2 adresów URL

Warunki: 1) Powinno to wykluczyć schemat http. 2) 'foo.com/a/b' i 'foo.com/a' powinny pasować.

+0

Zrobiłem wyszukiwanie google. Ale nie był w stanie znaleźć dobrego sposobu na zrobienie tego. – hegdesachin

+0

@hegdesachin Musisz być pierwszą osobą, która spróbuje porównać adresy URL. Nie ma dobrych sposobów na Google, oprócz pierwszego wyniku: [link] (http://msdn.microsoft.com/en-us/library/system.uri.compare.aspx) – Artless

+0

przez dźwięki tego "" a ". Zawiera ("b") 'wystarczy – Sayse

Odpowiedz

0

trudno jest wiedzieć, co właściwie znaczy „meczu” tutaj, ponieważ tylko dał jeden przykład. W takim przypadku możesz zrobić coś takiego.

bool UrlsMatch(string first, string second) 
{ 
    return !(first.ToLower().StartsWith("http://")) && first.ToLower().StartsWith(second.ToLower()); 
} 

chociaż możesz również chcieć sprawdzić je na odwrót.

Można również użyć Uri.Compare, ale nie znając dokładnych wymagań dotyczących równości, trudno byłoby określić, czy jest on całkowicie odpowiedni, czy nie.

1

jeśli mogę zrozumieć, co staramy się osiągnąć wówczas funkcję w tym celu może być coś takiego

bool Compare(string url1, string url2) 
    { 
     var str1 = url1.Replace("http://", String.Empty).ToLower(); 
     var str2 = url2.Replace("http://", String.Empty).ToLower(); 

     return (str1.Contains(str2) || str2.Contains(str1)); 
    } 
+0

możesz po prostu zwrócić swój parametr if, również' replace' zwraca nowy ciąg i nie zastępuje istniejącego – Sayse

+0

masz rację. Naprawiony! – sevdalone

20

należy użyć metody Uri.Compare.

Oto przykład porównania dwóch identyfikatorów URI z różnymi schematami.

public static void Test() 
{ 
    Uri uri1 = new Uri("http://www.foo.com/baz?bar=1"); 
    Uri uri2 = new Uri("https://www.foo.com/BAZ?bar=1"); 

    var result = Uri.Compare(uri1, uri2, 
     UriComponents.Host | UriComponents.PathAndQuery, 
     UriFormat.SafeUnescaped, StringComparison.OrdinalIgnoreCase); 

    Debug.Assert(result == 0); 
} 
Powiązane problemy