HttpListenerRequest.Url Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Uri Pobiera obiekt żądany przez klienta.
public:
property Uri ^ Url { Uri ^ get(); };
public Uri? Url { get; }
public Uri Url { get; }
member this.Url : Uri
Public ReadOnly Property Url As Uri
Wartość właściwości
Uri Obiekt identyfikujący zasób żądany przez klienta.
Przykłady
W poniższym przykładzie Url kodu pokazano użycie właściwości .
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
Uwagi
Właściwość Url umożliwia uzyskanie wszystkich informacji dostępnych z Uri obiektu. Jeśli musisz znać tylko nieprzetworzonego tekstu żądania identyfikatora URI, rozważ użycie RawUrl właściwości .
Właściwość Url ma wartość null, jeśli Uri nie można przeanalizować właściwości z klienta.
Właściwość UnescapeRequestUrl wskazuje, czy HttpListener używa nieprzetworzonego identyfikatora URI unescaped zamiast przekonwertowanego identyfikatora URI, w którym są konwertowane wartości zakodowane procentowo, a inne kroki normalizacji są wykonywane.
Gdy HttpListener wystąpienie odbiera żądanie za pośrednictwem http.sys
usługi, tworzy wystąpienie ciągu identyfikatora URI dostarczonego przez http.sys
usługę i uwidacznia je jako HttpListenerRequest.Url właściwość .
Usługa http.sys
uwidacznia dwa ciągi identyfikatora URI żądania:
Nieprzetworzone identyfikator URI
Przekonwertowany identyfikator URI
Pierwotny identyfikator URI jest System.Uri podany w wierszu żądania HTTP:
GET /path/
Host: www.contoso.com
Nieprzetworzonego identyfikatora URI podanego dla http.sys
powyższego żądania to "/path/". Reprezentuje to ciąg po czasowniku HTTP, który został wysłany przez sieć.
Usługa http.sys
tworzy przekonwertowany identyfikator URI na podstawie informacji podanych w żądaniu przy użyciu identyfikatora URI podanego w wierszu żądania HTTP i nagłówka hosta w celu określenia serwera pochodzenia, do którego należy przesłać żądanie. W tym celu należy porównać informacje z żądania z zestawem zarejestrowanych prefiksów identyfikatorów URI. Aby móc porównać te wartości, należy przeprowadzić normalizację żądania. W przykładzie powyżej przekonwertowanego identyfikatora URI będzie wyglądać następująco:
http://www.contoso.com/path/
Usługa http.sys
łączy Uri.Host wartość właściwości i ciąg w wierszu żądania, aby utworzyć przekonwertowany identyfikator URI. Ponadto http.sys
klasa również System.Uri wykonuje następujące czynności:
Usuwa wszystkie wartości zakodowane procentowo.
Konwertuje znaki niekodowane procentowo na reprezentację znaków UTF-16. Należy pamiętać, że znaki UTF-8 i ANSI/DBCS są obsługiwane, a także znaki Unicode (kodowanie Unicode przy użyciu formatu %uXXXX).
Wykonuje inne kroki normalizacji, takie jak kompresja ścieżki.
Ponieważ żądanie nie zawiera żadnych informacji o kodowaniu używanym dla wartości zakodowanych procentowo, może nie być możliwe określenie poprawnego kodowania tylko przez przeanalizowanie wartości zakodowanych procentowo.
W związku z tym http.sys
udostępnia dwa klucze rejestru do modyfikowania procesu:
Klucz rejestru | Wartość domyślna | Opis |
---|---|---|
EnableNonUTF8 | 1 | Jeśli zero, http.sys akceptuje tylko adresy URL zakodowane w formacie UTF-8.Jeśli nie ma wartości zero, http.sys akceptuje również adresy URL zakodowane za pomocą interfejsu ANSI lub zakodowane w dbCS w żądaniach. |
FavorUTF8 | 1 | Jeśli wartość niezerowa, http.sys zawsze próbuje zdekodować adres URL jako UTF-8. Jeśli ta konwersja nie powiedzie się, a parametr EnableNonUTF8 jest inny niż zero, Http.sys spróbuje zdekodować go jako ANSI lub DBCS.Jeśli zero (i EnableNonUTF8 jest niezerowe), http.sys próbuje zdekodować go jako ANSI lub DBCS; jeśli to nie powiedzie się, spróbuje konwersji UTF-8. |
Gdy HttpListener odbiera żądanie, używa przekonwertowanego identyfikatora URI z http.sys
jako danych wejściowych Url do właściwości .
Istnieje potrzeba obsługi znaków oprócz znaków i liczb w identyfikatorach URI. Przykładem jest następujący identyfikator URI, który służy do pobierania informacji o kliencie dla numeru klienta "1/3812":
http://www.contoso.com/Customer('1%2F3812')/
Zwróć uwagę na ukośnik zakodowany procentowo w identyfikatorze URI (%2F). Jest to konieczne, ponieważ w tym przypadku znak ukośnika reprezentuje dane, a nie ogranicznik ścieżki.
Przekazanie ciągu do konstruktora identyfikatora URI doprowadzi do następującego identyfikatora URI:
http://www.contoso.com/Customer('1/3812')/
Podzielenie ścieżki na jej segmenty spowodowałoby następujące elementy:
Customer('1
3812')
To nie jest intencja nadawcy żądania.
UnescapeRequestUrl Jeśli właściwość jest ustawiona na wartość false, a następnie po odebraniu HttpListener żądania używa nieprzetworzonego identyfikatora URI zamiast przekonwertowanego identyfikatora URI z http.sys
jako danych wejściowych Url do właściwości .