2016-11-23 3 views
-1

Ich habe bemerkt, dass, wenn Sie Uri.ToString() rufen, wenn hinter URI URL mit Prozent codierte Leerzeichen (% 20), dann werden Sie ungültige URL als Ergebnis haben:.NET Uri.ToString() zerstört die URL?

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

Da URL is URI (entgegengesetzte Aussage ist nicht korrekt) und URL mit nicht codierten Leerzeichen is not valid es sieht aus wie es ist nicht sicher, Uri als Container für URL zu verwenden.

Ist es richtiges Verhalten?

+0

Vermutlich 'toString()' wird Parsen das '% 20' nach dem übergeordneten Codierung spec, und bestimmt, dass es ein Raum sein sollte. –

+2

[MSDN] (https://msdn.microsoft.com/en-us/library/system.uri.tostring (v = vs.110) .aspx) sagt, es sollte die Zeichenfolge mit regulären Leerzeichen zurückgeben. Verwenden Sie .OriginalString, wenn Sie anstelle von Leerzeichen die% 20 möchten. – Tvde1

+1

Die Dokumentation, auf die Sie hingewiesen haben, sagt '.ToString()' gibt Leerzeichen zurück, während '.OriginalString''% 20' zurückgibt. – wdosanjos

Antwort

3

Wie pro 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

Guter Fang! Ist es nicht kontraintuitiv? .. –