HttpListenerRequest.Url Eigenschaft

Definition

Ruft das vom Client angeforderte Uri-Objekt ab.

public:
 property Uri ^ Url { Uri ^ get(); };
public Uri? Url { get; }
public Uri Url { get; }
member this.Url : Uri
Public ReadOnly Property Url As Uri

Eigenschaftswert

Uri

Ein Uri-Objekt, das die vom Client angeforderte Ressource bezeichnet.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der Url -Eigenschaft veranschaulicht.

public static void ShowRequestProperties1 (HttpListenerRequest request)
{
    // Display the MIME types that can be used in the response.
    string[] types = request.AcceptTypes;
    if (types != null)
    {
        Console.WriteLine("Acceptable MIME types:");
        foreach (string s in types)
        {
            Console.WriteLine(s);
        }
    }
    // Display the language preferences for the response.
    types = request.UserLanguages;
    if (types != null)
    {
        Console.WriteLine("Acceptable natural languages:");
        foreach (string l in types)
        {
            Console.WriteLine(l);
        }
    }

    // Display the URL used by the client.
    Console.WriteLine("URL: {0}", request.Url.OriginalString);
    Console.WriteLine("Raw URL: {0}", request.RawUrl);
    Console.WriteLine("Query: {0}", request.QueryString);

    // Display the referring URI.
    Console.WriteLine("Referred by: {0}", request.UrlReferrer);

    //Display the HTTP method.
    Console.WriteLine("HTTP Method: {0}", request.HttpMethod);
    //Display the host information specified by the client;
    Console.WriteLine("Host name: {0}", request.UserHostName);
    Console.WriteLine("Host address: {0}", request.UserHostAddress);
    Console.WriteLine("User agent: {0}", request.UserAgent);
}
Public Shared Sub ShowRequestProperties1(ByVal request As HttpListenerRequest)
    ' Display the MIME types that can be used in the response.
    Dim types As String() = request.AcceptTypes

    If types IsNot Nothing Then
        Console.WriteLine("Acceptable MIME types:")

        For Each s As String In types
            Console.WriteLine(s)
        Next
    End If

    ' Display the language preferences for the response.
    types = request.UserLanguages

    If types IsNot Nothing Then
        Console.WriteLine("Acceptable natural languages:")

        For Each l As String In types
            Console.WriteLine(l)
        Next
    End If

    ' Display the URL used by the client.
    Console.WriteLine("URL: {0}", request.Url.OriginalString)
    Console.WriteLine("Raw URL: {0}", request.RawUrl)
    Console.WriteLine("Query: {0}", request.QueryString)

    ' Display the referring URI.
    Console.WriteLine("Referred by: {0}", request.UrlReferrer)

    ' Display the HTTP method.
    Console.WriteLine("HTTP Method: {0}", request.HttpMethod)

    ' Display the host information specified by the client.
    Console.WriteLine("Host name: {0}", request.UserHostName)
    Console.WriteLine("Host address: {0}", request.UserHostAddress)
    Console.WriteLine("User agent: {0}", request.UserAgent)
End Sub

Hinweise

Mit Url der -Eigenschaft können Sie alle verfügbaren Informationen aus einem Uri Objekt abrufen. Wenn Sie nur den Rohtext der URI-Anforderung kennen müssen, sollten Sie stattdessen die RawUrl -Eigenschaft verwenden.

Die Url Eigenschaft ist NULL, wenn die Uri vom Client nicht analysiert werden konnte.

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 mithilfe des URI in der HTTP-Anforderungszeile und dem Hostheader, um den Ursprungsserver zu ermitteln, an den die Anforderung weitergeleitet werden soll. Dies erfolgt durch Vergleich der Informationen aus der Anforderung mit einer Reihe registrierter URI-Präfixe. Um diese Werte vergleichen zu können, muss eine gewisse Normalisierung mit der Anforderung erfolgen. 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