Uri比较处理相反的抨击

时间:2017-05-06 19:55:52

标签: c# .net uri normalization

我有一个自动化流程,可以生成本地化的Uri,然后将它们与从云中的远程源收集的列表进行比较。如果在路径上使用Uri.Compare,如果其中一个路径包含不同的面向斜杠(/\),则会报告1而不是{{1} }。

例如O/sites/OmegaSandbox\Shared Documents的比较。

如何有效地规范化 uri,或调整/sites/OmegaSandbox/Shared Documents方法以使用Compare 中的现有工具来处理不同的斜杠情况

猜想

.Net

将生成此字符串

  

/ sites / OmegaSandbox \ Shared Documents

这是问题的开始。

一个辅助问题可能是如何让Path.Combine尊重左手输入斜线方向?

现在,在这一点上,确定可以编写一个正则表达式替换操作,如Path.Combine("/sites/OmegaSandbox", "Shared Documents") 来换掉斜杠,这就是我可能要做的事情。

但StackOverflow野兽必须喂食,这个问题是红肉吧?

示例

Regex.Replace(" ... ", @"(\\)", "/")

无论设置了什么属性,上面的string uri1 = Path.Combine("/sites/OmegaSandbox", "Shared Documents"); string uri2 = @"/sites/OmegaSandbox/Shared Documents"; var u1 = new Uri(uri1, UriKind.Relative); var u2 = new Uri(uri2, UriKind.Relative); Uri.Compare(u1, u2, UriComponents.Fragment, UriFormat.SafeUnescaped, StringComparison.CurrentCultureIgnoreCase); 都不会返回Uri.Compare

是否有任何开箱即用的方式让0Compare使用不同的斜杠?

1 个答案:

答案 0 :(得分:1)

您是否尝试使用自定义比较逻辑添加扩展方法,例如

public static class UriExtension
{
    public static bool EqualityCheck(this Uri uri, Uri anotherUri)
    {
        return uri.OriginalString.Replace(@"\", @"/").Equals(anotherUri.OriginalString.Replace(@"\", @"/"));
    }
}

并像

一样使用它
var u1 = new Uri(uri1, UriKind.Relative);
var u2 = new Uri(uri2, UriKind.Relative);

u1.EqualityCheck(u2);