在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,如果在字符串的开头添加一个额外的斜杠,他会得到我的预期结果(我也试过这个,但无济于事。)
我不确定这是Uri类在单声道中的问题,或者如果我对URI类应该如何工作的理解是有缺陷的,但任何可以帮助我达到预期输出的建议都将非常感激
谢谢,
亚历
答案 0 :(得分:1)
似乎它使它与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);
答案 1 :(得分:1)
Uri.MakeRelativeUri的Microsoft .NET文档说它应该为相对的Uris抛出InvalidOperationException
。
您编写的代码会在第一行引发异常:“无效的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);
然后最后一行抛出InvalidOperationException
:相对URI不支持此操作。正如文档所说的那样。
因此看起来Mono实现与.NET文档不一致。