比较两个URL的最佳方法

20

我想比较两个URL,最好的方法是什么?

条件: 1)它应该排除http协议。 2)'foo.com/a/b'和'foo.com/a'应该被视为匹配。


我进行了谷歌搜索,但是没有找到一个好的方法来完成它。 - hegdesachin
@hegdesachin 你一定是第一个尝试比较URL的人。在谷歌上没有好的方法,除了第一个结果:链接 - Artless
听起来 "a".Contains("b") 就足够了。 - Sayse
4个回答

44
你应该使用Uri.Compare方法。这里是一个比较具有不同方案的两个URI的例子。
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);
}


11

0

因为你只给了一个例子,所以很难知道你在这里实际意思是什么。在这种情况下,你可以像这样做。

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

虽然您也可以反过来检查它们。

您还可以使用Uri.Compare,但如果不知道您对相等性的确切要求,那么确定它是否完全合适可能会很棘手。


0

如果我理解你想要实现的功能,那么一个可以完成这个任务的函数可能是这样的:

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

你可以直接返回参数,同时 replace 返回一个新的字符串而不是替换原有的字符串。 - Sayse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接