以下代码...
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 会取消转义相对路径? 解决方法似乎是对相对路径进行两次编码,但为什么呢?
我应该使用其他方法来创建此 url 吗?
编辑:我更新了代码以显示更奇怪的行为,相对 uri 的第一部分保持编码,但第二部分没有!
URI 是一个对象,将以干净/未转义的形式表示链接。如果要按添加方式检索它,请使用以下属性。
uri.OriginalString