HttpListenerElement.UnescapeRequestUrl Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob HttpListener den unformatierten URI ohne Escapezeichen anstelle des konvertierten URI verwendet.

public:
 property bool UnescapeRequestUrl { bool get(); };
[System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)]
public bool UnescapeRequestUrl { get; }
[<System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)>]
member this.UnescapeRequestUrl : bool
Public ReadOnly Property UnescapeRequestUrl As Boolean

Eigenschaftswert

Ein boolescher Wert, der angibt, ob HttpListener den unformatierten URI ohne Escapezeichen anstelle des konvertierten URI verwendet.

Attribute

Hinweise

Die UnescapeRequestUrl -Eigenschaft gibt an, ob HttpListener der unformatierte unformatierte URI anstelle des konvertierten URI verwendet wird, bei dem alle prozentcodierten Werte konvertiert und andere Normalisierungsschritte ausgeführt werden.

Wenn eine HttpListener-Instanz eine Anforderung über den http.sys-Dienst empfängt, erstellt sie eine Instanz der von http.sys bereitgestellten URI-Zeichenfolge und macht sie als HttpListenerRequest.Url-Eigenschaft verfügbar.

Der http.sys-Dienst macht zwei Anforderungs-URI-Zeichenfolgen verfügbar:

  • Unformatierter URI

  • Konvertierter URI

Der unformatierte URI ist der in der Anforderungszeile einer HTTP-Anforderung bereitgestellte System.Uri-Wert:

GET /path/

Host: www.contoso.com

Der von http.sys für die oben genannte Anforderung bereitgestellte unformatierte URI lautet „/path/“. Dies stellt die Zeichenfolge dar, die dem HTTP-Verb folgt, so wie sie über das Netzwerk gesendet wurde.

Der http.sys-Dienst erstellt einen konvertierten URI aus den in der Anforderung bereitgestellten Informationen. Dazu wird anhand des in der HTTP-Anforderungszeile bereitgestellte URI und des Hostheaders der Ursprungsserver bestimmt, an den die Anforderung weitergeleitet werden soll. Dies erfolgt durch Vergleich der Informationen aus der Anforderung mit einer Reihe registrierter URI-Präfixe. In der HTTP Server SDK-Dokumentation wird dieser konvertierte URI als HTTP_COOKED_URL-Struktur bezeichnet.

Damit die Anforderung mit registrierten URI-Präfixen verglichen werden kann, muss eine Normalisierung der Anforderung durchgeführt werden. Für das Beispiel oben würde der konvertierte URI wie folgt lauten:

http://www.contoso.com/path/

Der http.sys-Dienst kombiniert den Eigenschaftswert von Uri.Host und die Zeichenfolge in der Anforderungszeile, um einen konvertierten URI zu erstellen. Darüber hinaus http.sys und die System.Uri -Klasse tut auch Folgendes:

  • Entfernt alle Escapezeichen aus mit Prozentzeichen codierten Werten.

  • Konvertiert mit Prozentzeichen codierte Nicht-ASCII-Zeichen in eine UTF-16-Zeichendarstellung. Beachten Sie, dass UTF-8- und ANSI/DBCS-Zeichen sowie Unicode-Zeichen unterstützt werden (Unicode-Codierung mit dem Format „%uXXXX“).

  • Führt weitere Normalisierungsschritte wie beispielsweise eine Pfadkomprimierung aus.

Da die Anforderung keine Informationen zu der Codierung enthält, die für die mit Prozentzeichen codierten Werte verwendet wurde, ist es u. U. nicht möglich, die richtige Codierung nur durch Parsen der mit Prozentzeichen codierten Werte zu ermitteln.

Daher stellt http.sys zwei Registrierungsschlüssel zum Ändern des Prozesses bereit:

Registrierungsschlüssel Standardwert BESCHREIBUNG
EnableNonUTF8 1 Wenn dieser Schlüssel 0 (null) ist, akzeptiert http.sys nur UTF-8-codierte URLs.

Wenn dieser Schlüssel nicht 0 (null) ist, akzeptiert http.sys auch ANSI- oder DBCS-codierte URLs in Anforderungen.
FavorUTF8 1 Wenn dieser Schlüssel nicht 0 (null) ist, versucht http.sys immer zuerst, eine URL als UTF-8 zu decodieren. Wenn diese Konvertierung nicht funktioniert und EnableNonUTF8 nicht 0 (null) ist, versucht Http.sys, die URL als ANSI oder DBCS zu decodieren.

Wenn dieser Schlüssel 0 (null) und EnableNonUTF8 nicht 0 (null) ist, versucht http.sys, die URL als ANSI oder DBCS zu entschlüsseln. Wenn das nicht erfolgreich ist, wird eine UTF-8-Konvertierung versucht.

Wenn HttpListener eine Anforderung empfängt, wird der konvertierte URI von http.sys als Eingabe für die Url-Eigenschaft verwendet.

Neben Zeichen und Zahlen müssen in URIs auch andere Zeichen unterstützt werden. Ein Beispiel ist der folgende URI, mit dem Kundeninformationen für die Kundennummer „1/3812“ abgerufen werden sollen:

http://www.contoso.com/Customer('1%2F3812')/

Beachten Sie den mit Prozentzeichen codierten Schrägstrich im URI (%2F). Dies ist notwendig, da in diesem Fall das Schrägstrichzeichen Daten darstellt und kein Pfadtrennzeichen.

Das Übergeben der Zeichenfolge an den URI-Konstruktor führt zu folgendem URI:

http://www.contoso.com/Customer('1/3812')/

Das Teilen des Pfads in seine Segmente würde zu den folgenden Elementen führen:

Customer('1

3812')

Das ist nicht die Absicht des Absenders der Anforderung.

Wenn die UnescapeRequestUrl Eigenschaft auf false festgelegt ist, verwendet sie HttpListener beim Empfang einer Anforderung den rohen URI anstelle des konvertierten URI von http.sys als Eingabe in die Url -Eigenschaft.

Gilt für:

Weitere Informationen