HttpListenerRequest.Url Właściwość

Definicja

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

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.sysusł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 .

Dotyczy

Zobacz też