2010-09-11 63 views
3

在單聲道(2.6.7)上使用MakeRelativeUri時,我看到了一些奇怪的(對我來說)行爲。看看下面的例子:Uri.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類應該如何工作的理解是有缺陷的,但是可以幫助我達到預期輸出的任何建議都會很大讚賞。

感謝,

亞歷

回答

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); 
+0

有趣。這似乎解決了我的問題,但它看起來好像它可能是單聲道中的URI類的問題。感謝您的幫助,希望我們能夠找出最終的原因 – AlexCuse 2010-09-11 22:24:18

+0

這是因爲'/ somepath/img/someimg.jpg'是'/ somepath/someothersubpath'中的'img/someimg.jpg'看法。但是爲這條路徑添加一個尾部的斜線使它成爲'/ somepath/someothersubpath /'應該意味着我們在那個目錄內,但是看起來'Mono'忽略了這個,也許是一個錯誤。但是,在路徑的末尾添加新組件會迫使它更改爲_deeper的觀點_ :) – aularon 2010-09-11 22:24:52

+0

是的,它確實看起來像mono是忽略它。添加另一個斜線也可以,也許它只是修剪一個結尾斜線? – AlexCuse 2010-09-11 22:27:22

1

Uri.MakeRelativeUri微軟.NET文檔中說,它應該拋出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文檔不一致。

+0

對不起,似乎我應該已經更清楚了。我正在使用UriKind.Absolute,但由於結果是相同的,所以我將其排除在外。在這種情況下,我實際上正在解決文件系統(這些是絕對路徑)。 – AlexCuse 2010-09-12 21:56:21

+0

當關鍵信息被忽略時,提供知情和相關答案相當困難。 – 2010-09-13 14:08:36