HttpListenerRequest.Url Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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.