代码之家  ›  专栏  ›  技术社区  ›  AlexCuse

单声道上的uri.makerelativeuri行为

  •  3
  • AlexCuse  · 技术社区  · 14 年前

    在Mono(2.6.7)上使用MakeRelativeUri时,我看到了一些奇怪的行为(不管怎样)。举个例子:

    var uri1 = new Uri("/somepath/someothersubpath/");
    var uri2 = new Uri("/somepath/img/someimg.jpg");
    
    var uri3 = uri1.MakeRelativeUri(uri2);
    Console.WriteLine(uri3.OriginalString);
    

    我希望它能输出 "../img/someimg.jpg" 但我得到 "img/someimg.jpg"

    一位朋友使用Windows/Visual Studio确认,如果在字符串的开头附加一个斜杠,他会得到我期望的结果(我也尝试过,但没有效果)。

    我不确定这是否是Mono中的uri类的问题,或者我对uri类应该如何工作的理解是否有缺陷,但是任何能帮助我达到预期输出的建议都将非常感谢。

    谢谢,

    亚历克斯

    2 回复  |  直到 14 年前
        1
  •  1
  •   aularon    14 年前

    它似乎与 someothersubpath 它自己,而不是它的孩子。

    我不确定,但也许可以通过在第一个字符串上附加任何内容来绕过这个问题:

    var uri1 = new Uri("/somepath/someothersubpath/anything");
    var uri2 = new Uri("/somepath/img/someimg.jpg");
    
    var uri3 = uri1.MakeRelativeUri(uri2);
    Console.WriteLine(uri3.OriginalString);
    
        2
  •  1
  •   Jim Mischel    14 年前

    的Microsoft.NET文档 Uri.MakeRelativeUri 说它应该扔 InvalidOperationException 对于相对URI。

    您编写的代码在第一行引发异常:“无效的URI:无法确定URI的格式。”如果我修改代码:

        var uri1 = new Uri("/somepath/someothersubpath/", UriKind.RelativeOrAbsolute);
        var uri2 = new Uri("/somepath/img/someimg.jpg", UriKind.RelativeOrAbsolute);
    
        var uri3 = uri1.MakeRelativeUri(uri2);
    

    然后最后一行掷 无效操作异常 :相对URI不支持此操作。正如文件所说的那样。

    因此,Mono实现似乎与.NET文档不一致。