2013-10-26 25 views
5

Ist es möglich, mit System.Uri eine URL mit einer leeren Pfadkomponente darzustellen? Jedes Mal, wennUri mit leerem Pfad

Ich schaffe

new Uri("http://example.com") 

.Net (4) auf das Anhängen eines Schrägstrich zu bestehen scheint, wodurch eine andere URL zu erstellen. Mit anderen Worten,

new Uri("http://example.com").ToString() 

returns "http://example.com/" und

new Uri("http://example.com").Equals(new Uri("http://example.com/")) == true 

Kann dieses gebrochene Verhalten (gemäß RFC 3986) werden unterdrückt oder muss ich meine eigene Klasse rollen?

Update:

Sieht aus wie ich dies in Abschnitt 6.2.3 verpasst:

Im Allgemeinen ist eine URI, die die generische Syntax für Behörde verwendet, um mit einem
leeren Pfad sollte normalisiert werden zu einem Pfad von "/".

Die Formulierung zeigt an, dass dies optional ist. So bleibt die Frage: Kann Uri dazu gebracht werden, dies NICHT zu tun?

+2

http://en.wikipedia.org/wiki/URL_normalization "Für HTTP- und HTTPS-URLs können die folgenden in RFC 3986 aufgelisteten Normalisierungen zu entsprechenden URLs führen, die jedoch nicht von den Standards garantiert werden: ** Hinzufügen von Trailing/** Verzeichnisse sind mit einem nachgestellten Schrägstrich gekennzeichnet und sollten in den URLs " –

+0

@TimSchmelter Right" enthalten sein, damit .Net eine "Normalisierung [s] anwendet, die normalerweise die Semantik bewahrt". Was bedeutet, dass es nicht immer korrekt ist, und in meinem Fall ist es absolut falsch. Die Frage ist: Kann es deaktiviert werden? – arbitrix

+0

@arbitrix Können Sie erklären, warum es Ihnen wichtig ist? Warum ist es "tot falsch"? – svick

Antwort

1

Seit .NET 2.0 können Sie die ursprüngliche Zeichenfolge erhalten, die über OriginalString property an den Konstruktor übergeben wird. Die ursprüngliche Zeichenfolge geht verloren, wenn das Objekt Uri serialisiert wird.

Wenn dies nicht das ist, was Sie wollen, gibt es keine Hilfe. Equals und ToString Methoden verwenden immer die normalisierte Version.