.NET Uri.ToString()破坏了URL?

.NET Uri.ToString()破坏了URL?

问题描述:

我已经注意到,如果你打电话Uri.ToString()当URI背后是百分之编码的空间(20%)的URL,那么你就会有错误的URL作为结果:.NET Uri.ToString()破坏了URL?

// result: "http://example.com/test segment" 
new Uri("http://example.com/test%20segment").ToString(); 

由于URL is URI(相反说法是不正确的)和带有非编码空间的URL is not valid它看起来使用Uri作为URL的容器是不安全的。

这是正确的行为吗?

+0

推测'的ToString()'被解析'%20'以下母体编码规范,并确定它应该是一个空间。 –

+2

[MSDN](https://msdn.microsoft.com/en-us/library/system.uri.tostring(v = vs.110).aspx)表示应该使用常规空格返回字符串。如果你想用'%20'代替空格,使用.OriginalString。 – Tvde1

+1

你指出的文档说'.ToString()'返回空格,而'.OriginalString'返回'%20'。 – wdosanjos

作为每MSDN

// result: "http://example.com/test segment" 
new Uri("http://example.com/test%20segment").ToString(); 

// result: "http://example.com/test%20segment" 
new Uri("http://example.com/test%20segment").OriginalString; 
+0

好抓!这不是违反直觉吗?.. –