Следующий код ...новый 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
Почему Ури игнорирует относительный путь? Кажется, что работа заключается в том, чтобы дважды закодировать относительный путь, но почему?
Есть ли альтернативный метод, который я должен использовать для создания этого URL-адреса?
EDIT: я обновил код, чтобы отобразить еще более странное поведение, первая часть относительного uri остается закодированной, а вторая - нет!
Я вошел это как ошибка в Microsoft Connect ... https://connect.microsoft.com/VisualStudio/feedback/details/2444172 – Mick
Позволяет делать математику на если это ошибка , Сколько разработчиков каждый день использует Uri? Много думаю! Ури был в .net с версии 1.1 - 2003 ish? Я думаю, они уже заметили бы ... – Gusdor
@ Гусдор. Я хорошо знаю, как долго Ури находится в рамках. Я бы сказал, с первой бета-версии 2001 года (которую я использовал). Тем не менее, если вы запускаете код, он не ведет себя последовательно, какое возможное логическое объяснение может быть для него декодированием одной половины относительного пути и оставить вторую половину закодированной? – Mick