2012-04-13 50 views
6
var baseUri = new Uri("http://localhost/"); 
var uri1 = new Uri(baseUri, "1"); 
var uri2 = new Uri(uri1, "2"); 

意外的是,uri2http://localhost/2。我將如何追加到uri1因此它是http://localhost/1/2 intead? Uri是否會這樣做,還是我需要回退到字符串?順便說一下,我已經嘗試在幾乎所有地方添加前導斜線/尾部斜線。使用System.Uri附加多個段

回答

11

「1」和「2」是url的「文件名部分」。如果你把「1」看起來更像目錄路徑,將工作確定「1 /」:

var baseUri = new Uri("http://localhost/"); 
var uri1 = new Uri(baseUri, "1/"); 
var uri2 = new Uri(uri1, "2"); 

注:「文件名部分」是不是一個真正的來看,由於只有網址有「路徑」和「查詢「組件,但通常最後一個路徑塊被視爲文件名:」/foo/bar/file.txt「。

當您合併2個路徑時,您需要將第一個路徑的尾部替換爲第二個路徑。在你的情況下,它最終只有「文件名」段:「/ 1」和「2」(如果你把真正的值如「/myFile.txt」和「NewFile.txt」結合起來會更容易看看它爲什麼這樣表現)。

+0

啊,這是我一定不會試圖用斜線的地方。 – Daniel 2012-04-13 21:37:09

+1

刪除我的答案。此外,這在這裏驗證http://compilify.net/bd – 2012-04-13 21:37:35

+0

@丹尼爾,我也更新了一個答案,以顯示它爲什麼這樣表現... – 2012-04-13 21:43:17