MakeRelativeUri导致不一致的LocalPath转义?

时间:2017-01-13 21:57:23

标签: c# path uri relative-path

考虑以下程序(使用.NET 4.6.1测试):

var baseUri = new Uri(@"C:\test \", UriKind.Absolute);
var absolute = new Uri(@"C:\test \space .txt", UriKind.Absolute);
var relative = new Uri("space .txt", UriKind.Relative);
var combined = new Uri(baseUri, relative);

Uri extracted = baseUri.MakeRelativeUri(absolute);
var rebuilt = new Uri(baseUri, extracted);

Console.WriteLine(baseUri.LocalPath);  // Outputs C:\test \
Console.WriteLine(absolute.LocalPath); // Outputs C:\test \space .txt
Console.WriteLine(combined.LocalPath); // Outputs C:\test \space .txt
Console.WriteLine(rebuilt.LocalPath);  // Outputs C:\test \space%20.txt

我没想到最后一行的结果。这是一个错误还是正常的行为? (注意:从Mono 4.4.1执行程序会产生一致的结果 - 输出中没有%20。)

要获得我期望的结果,以下解决方法可行。但是,在我确定它是否是一个错误之前,我觉得使用它并不舒服,因为行为可能会改变。

var rebuilt = new Uri(baseUri, Uri.UnescapeDataString(extracted.ToString()));

0 个答案:

没有答案