下面的代碼...新的URI解碼相對路徑
string date = DateTime.UtcNow.ToString("o");
Console.WriteLine(date);
string encodedDate = WebUtility.UrlEncode(date);
Console.WriteLine(encodedDate);
Uri uri = new Uri("https://mywebsite/");
Console.WriteLine(uri.ToString());
string relativePath = $"/mM0jpk613J5lzY00c3EaxQ%3D%3D/{encodedDate}";
Console.WriteLine(relativePath);
uri = new Uri(uri, relativePath);
Console.WriteLine(uri.ToString());
產生下面的輸出是: -
2016-03-07T08:17:38.5247330Z
2016-03-07T08%3A17%3A38.5247330Z
https://mywebsite/
/mM0jpk613J5lzY00c3EaxQ%3D%3D/2016-03-07T08%3A17%3A38.5247330Z
https://mywebsite/mM0jpk613J5lzY00c3EaxQ%3D%3D/2016-03-07T08:17:38.5247330Z
我期待的最後一行是
https://mywebsite/mM0jpk613J5lzY00c3EaxQ%3D%3D/2016-03-07T08%3A17%3A38.5247330Z
Uri爲什麼不能找到相對路徑?解決方法似乎是對相關路徑進行兩次編碼,但爲什麼?
是否有另一種方法,我應該用來創建此網址?
編輯:我更新了代碼以顯示更奇怪的行爲,相對uri的第一部分仍然編碼,但第二個不行!
我已經登錄這是微軟的一個錯誤連接... https://connect.microsoft.com/VisualStudio/feedback/details/2444172 – Mick
讓我們做,如果這是一個錯誤的數學。每天有多少開發者使用Uri類?我認爲很多! Uri自1.1 - 2003版以來一直使用.net?我認爲他們現在已經注意到了...... – Gusdor
@Gusdor我很清楚Uri已經在框架中工作了多久。我會從2001年的第一個測試版(我使用過)說。如果你運行的代碼行爲不一致,那麼可能有什麼可能的邏輯解釋來解碼相對路徑的一半並將另一半編碼? – Mick