2016-11-23 78 views
-1

我已經注意到,如果你打電話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

回答

3

作爲每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

好抓!這不是違反直覺嗎?.. –