Freigeben über


<httpListener>-Element (Netzwerkeinstellungen)

Passt die von der HttpListener-Klasse verwendeten Parameter an.

<configuration>
  <system.net>
    <settings>
      <httpListener>

Syntax

<httpListener  
  unescapeRequestUrl="true|false"  
/>  

type

Attribute und Elemente

In den folgenden Abschnitten werden Attribute sowie untergeordnete und übergeordnete Elemente beschrieben.

Attribute

attribute Beschreibung
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 Beschreibung
settings Konfiguriert grundlegende Netzwerkoptionen für den System.Net-Namespace.

Bemerkungen

Das Attribut unescapeRequestUrl gibt an, ob HttpListener den unformatierten URI ohne Escapezeichen anstelle des konvertierten URI verwendet, bei dem alle mit Prozentzeichen codierten Werte konvertiert und weitere Normalisierungsschritte ausgeführt wurden.

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 Dokumentation zum HTTP Server SDK 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 führen http.sys und die System.Uri-Klasse zu Folgendem:

  • 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 das UnescapeRequestUrl-Attribut auf FALSE festgelegt ist und der HttpListener eine Anforderung empfängt, verwendet er den unformatierten URI statt des konvertierten URI aus 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 den entsprechenden Konfigurationsdateien abzurufen.

Beispiel

Das folgende Beispiel zeigt, wie Sie die HttpListener-Klasse so konfigurieren, dass sie den unformatierten URI anstelle des konvertierten URI als http.sys-Eingabe für die Url-Eigenschaft verwendet, wenn sie eine Anforderung empfängt.

<configuration>  
  <system.net>  
    <settings>  
      <httpListener  
        unescapeRequestUrl="false"  
      />  
    </settings>  
  </system.net>  
</configuration>  

Elementinformationen

Namespace: System.Net

Siehe auch