<httpListener>-Element (Netzwerkeinstellungen)
Passt die von der HttpListener-Klasse verwendeten Parameter an.
<httpListener
unescapeRequestUrl ="true|false"
/>
Attribute und Elemente
In den folgenden Abschnitten werden Attribute, untergeordnete Elemente und übergeordnete Elemente beschrieben.
Attribute
Attribute |
Beschreibungen |
---|---|
unescapeRequestUrl |
Ein boolescher Wert, der angibt, ob eine HttpListener-Instanz den unformatierten URI ohne Escapezeichen anstelle des konvertierten URI verwendet. |
Untergeordnete Elemente
Keine.
Übergeordnete Elemente
Element |
Beschreibungen |
---|---|
Konfiguriert grundlegende Netzwerkoptionen für den System.Net-Namespace. |
Hinweise
Das unescapeRequestUrl-Attribut gibt an, ob HttpListener den unformatierten URI ohne Escapezeichen anstelle des konvertierten URIs verwendet, wobei alle mit Prozentzeichen codierten Werte konvertiert und andere Normalisierungsschritte unternommen werden.
Wenn eine HttpListener-Instanz durch den http.sys-Dienst eine Anforderung empfängt, erstellt sie eine Instanz der URI-Zeichenfolge, die von http.sys bereitgestellt wurde, 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:
GET /path/
Host: www.contoso.com
Der unformatierte URI, der von http.sys für die oben genannte Anforderung angegeben wird, ist "/path/". Dies stellt die Zeichenfolge dar, die auf das HTTP-Verb folgt, wie es über das Netzwerk gesendet wurde.
Der http.sys-Dienst erstellt einen konvertierten URI aus den in der Anforderung bereitgestellten Informationen, indem der URI aus der HTTP-Anforderungszeile und der Host-Header verwendet werden, um den Ursprungsserver zu bestimmen, an den die Anforderung weitergeleitet werden soll. Dies geschieht durch Vergleichen der Informationen aus der Anforderung mit einem Satz registrierter URI-Präfixe. Die HTTP-Server-SDK-Dokumentation verweist auf diesen konvertierten URI als HTTP_COOKED_URL-Struktur.
Um in der Lage zu sein, die Anforderung mit registrierten URI-Präfixen zu vergleichen, muss eine Normalisierung der Anforderung ausgeführt werden. Für das Beispiel oben würde der konvertierte URI wie folgt lauten:
Der http.sys-Dienst kombiniert den Uri.Host-Eigenschaftswert und die Zeichenfolge in der Anforderungszeile, um einen konvertierten URI zu erstellen. Darüber hinaus führen http.sys und die System.Uri-Klasse Folgendes aus:
Entfernt alle als Prozentwert codierten Werte.
Konvertiert mit Prozentzeichen kodierte Nicht-ASCII-Zeichen in eine UTF-16-Zeichendarstellung. Beachten Sie, dass UTF-8 und ANSI-/DBCSs-Zeichen sowie Unicode-Zeichen (Unicode-Codierung, die das %uXXXX-Format verwendet) unterstützt werden.
Führt andere Normalisierungsschritte aus, wie etwa Pfadkomprimierung.
Da die Anforderung keine Informationen über die Codierung enthält, die für Prozentzeichen kodierte Werte verwendet wird, ist es eventuell nicht möglich, die richtige Codierung nur durch das Analysieren der mit Prozentzeichen codierten Werte zu bestimmen.
Daher stellt http.sys zwei Registrierungsschlüssel zum Ändern des Prozesses bereit:
-Registrierungsschlüssel |
Standardwert |
Beschreibungen |
---|---|---|
EnableNonUTF8 |
1 |
Falls 0 (null), akzeptiert http.sys nur UTF 8-codierte URLs. Falls ungleich 0 (null) akzeptiert http.sys auch ANSI-codiert oder DBCS-codierte URLs in Anforderungen. |
FavorUTF8 |
1 |
Falls ungleich 0 (null) versucht http.sys immer, zuerst eine URL als UTF-8 zu decodieren; wenn diese Konvertierung fehlschlägt, und EnableNonUTF8 ist ungleich 0 (null), versucht Http.sys dann, es als ANSI oder DBCS zu decodieren. Falls der Wert 0 (null) beträgt (und EnableNonUTF8 ungleich 0 (null) ist), versucht http.sys, es als ANSI oder DBCS zu decodieren; wenn das nicht erfolgreich ist, versucht es eine UTF-8-Konvertierung. |
Wenn das HttpListener-Objekt eine Anforderung empfängt, verwendet es den konvertierten URI von http.sys als Eingabe für Url-Eigenschaft.
In URIs müssen auch andere Zeichen als Buchstaben und Zahlen unterstützt werden. Ein Beispiel ist der folgende URI, der verwendet wird, um Kundeninformationen für Kunde Nummer "1/3812" abzurufen:
https://www.contoso.com/Customer('1%2F3812')/
Beachten Sie den mit Prozentzeichen codierten Schrägstrich in der URI (% 2F). Dies ist notwendig, da das Schrägstrichzeichen in diesem Fall Daten und kein Pfadtrennzeichen darstellt.
Das Übergeben der Zeichenfolge an den URI-Konstruktor führt zur folgenden URI:
https://www.contoso.com/Customer('1/3812')/
Das Aufteilen des Pfads in seine Segmente würde zu den folgenden Elementen führen:
Customer('1
3812')
Dies ist nicht die Absicht des Absenders der Anforderung.
Wenn das unescapeRequestUrl-Attribut auf false festgelegt wird, wenn der HttpListener eine Anforderung empfängt, verwendet es den unformatierten URI statt des konvertierten URIs von http.sys als Eingabe für die Url-Eigenschaft.
Der Standardwert für das unescapeRequestUrl-Attribut ist true.
Die UnescapeRequestUrl-Eigenschaft kann verwendet werden, um den aktuellen Wert des unescapeRequestUrl-Attributs aus anwendbaren Konfigurationsdateien abzurufen.
Beispiel
Im folgenden Codebeispiel wird gezeigt, wie die HttpListener-Klasse konfiguriert wird, wenn sie eine Anforderung zur Verwendung des unformatierten URI statt des konvertierten URI von http.sys als Eingabe für die Url-Eigenschaft empfängt.
<configuration>
<system.net>
<settings>
<httpListener
unescapeRequestUrl="false"
/>
</settings>
</system.net>
</configuration>
Elementinformationen
Namespace |
System.Net |
Schemaname |
|
Validierungsdatei |
|
Kann leer sein |