Best way to compare 2 urls [closed]

2020-08-20 03:35发布

问题:

I want to compare 2 URLs. Whats the best way to do this?

Conditions: 1) It should exclude the http scheme. 2) 'foo.com/a/b' and 'foo.com/a' should be a match.

回答1:

You should use the Uri.Compare method.

Here is an example to compare two URI's with different schemes.

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);
}


回答2:

use the c# URI class to represent your URIs

then use the uri.compare function



回答3:

It's difficult to know what you actually mean by "match" here, since you only gave one example. In this case you could do something like this.

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

although you may also want to check them the other way around as well.

You could also use Uri.Compare, but without knowing your exact requirements for equality it would be tricky to know if it is completely suitable or not.



回答4:

if i understand what you are trying to accomplish then a function to do this can be something like this

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));
    }