【发布时间】:2016-03-07 08:10:21
【问题描述】:
以下代码...
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 的第一部分保持编码,但第二部分没有!
【问题讨论】:
-
我已将其记录为 microsoft connect 的错误...connect.microsoft.com/VisualStudio/feedback/details/2444172
-
让我们计算一下这是否是一个错误。每天有多少开发者使用 Uri 类?很多我觉得! Uri 自 1.1 - 2003 版以来一直在 .net 中?我想他们现在应该已经注意到了……
-
@Gusdor 我很清楚 Uri 在框架中的使用时间。我会说从第一个 beta 2001(我使用的)开始。如果您运行代码的行为不一致,那么对于它解码相对路径的一半并留下另一半编码的可能的逻辑解释是什么?
-
有人想知道我的工作是使用文件时间而不是不需要编码和解码
标签: c# .net url-encoding