新的Uri解码相对路径

时间:2016-03-07 08:10:22

标签: c# .net url-encoding

以下代码......

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的第一部分仍然编码,但第二部分没有编码!

1 个答案:

答案 0 :(得分:2)

URI是一个对象,它将以干净/未转义的形式表示链接。如果您要按照添加方式检索它,请使用以下属性。

uri.OriginalString