2012-10-04 22 views
0

編輯:我改寫的問題,以使其更清晰URI構造

我想了解什麼是開放的(URI,URI)構造函數的行爲:

new Uri(new Uri("http://mydomain.com/some/path"), new Uri("/another/path")) 

我得到以下結果:

"http://mydomain.com/another/path" 

但我找不到任何文檔清楚地說明創建規則是什麼。 換句話說,它是保證,我永遠不會得到以下?

"http://mydomain.com/some/path/another/path" 

,除非我的第二個參數使用:

new Uri("another/path") 
+0

做'新的URI( 「http://mydomain.com/some/path」)'和'新的URI(「/另一個/路徑「)* *都*給你結果 '」http://mydomain.com/another/path「'? –

+0

我不明白你的問題是什麼。每個「新Uri」都是獨立的。 – Oded

+0

雨果,你錯過了一個重要的細節:這兩個Uri實例如何相互影響?因爲你顯示的代碼不會導致一個包含兩者的部分的Uri。 –

回答

4

你的第二個Uri"/another/path"植根(它/開頭),因此創建將有域,然後它Uri

如果你的第二個Uri"another/path",結果將是"http://mydomain.com/some/path/another/path"

0

問題是第一個參數是BASE,第二個參數是BASE-RELATIVE url。

請看第二個:它以'/'開頭。這意味着第二個是ABSOLUTE,因此,只有domainname是從基地取得的,其餘的是從字面上取的。

如果你想相對,然後使它相對:

new Uri(new Uri("http://mydomain.com/some/path"), new Uri("another/path")) 

請注意龍頭/現在下落不明!

1

您的第一個Uri必須以'/'結尾。第二個應該將前導'/'移除並設置爲UriKind.Relative

Uri a = new Uri("http://mydomain.com/some/path/"); 
Uri b = new Uri("another/path", UriKind.Relative); 

Uri c = new Uri(a, b); 

Console.WriteLine(c); 

這將輸出:

http://mydomain.com/some/path/another/path