Sdílet prostřednictvím


HttpListenerRequest.Url Vlastnost

Definice

Uri Získá objekt požadovaný klientem.

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

Hodnota vlastnosti

Uri

Objekt Uri , který identifikuje prostředek požadovaný klientem.

Příklady

Následující příklad kódu ukazuje použití Url vlastnosti.

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

Poznámky

Vlastnost Url umožňuje získat všechny informace dostupné z objektu Uri . Pokud potřebujete znát pouze nezpracovaný text požadavku URI, zvažte místo toho použití RawUrl vlastnosti .

Vlastnost Url je null, pokud Uri z klienta nelze analyzovat.

Vlastnost UnescapeRequestUrl označuje, jestli HttpListener používá nezpracovaný identifikátor URI místo převedeného identifikátoru URI, kde jsou převedeny hodnoty zakódované v procentech a jsou podniknuty další kroky normalizace.

HttpListener Když instance přijme požadavek prostřednictvím http.sys služby, vytvoří instanci řetězce identifikátoru URI poskytnutého službou http.sysa zpřístupní ji jako HttpListenerRequest.Url vlastnost.

Služba http.sys zveřejňuje dva řetězce identifikátoru URI požadavku:

  • Nezpracovaný identifikátor URI

  • Převedený identifikátor URI

Nezpracovaný identifikátor URI je System.Uri uvedený v řádku požadavku HTTP:

GET /path/

Host: www.contoso.com

Nezpracovaný identifikátor URI, který http.sys pro výše uvedený požadavek poskytuje, je /path/. Představuje řetězec následující za příkazem HTTP, který byl odeslán přes síť.

Služba http.sys vytvoří převedený identifikátor URI z informací uvedených v požadavku pomocí identifikátoru URI zadaného na řádku požadavku HTTP a hlavičky hostitele, aby určila server původu, na který se má požadavek předávat. To se provádí porovnáním informací z požadavku se sadou registrovaných předpon URI. Aby bylo možné tyto hodnoty porovnat, je potřeba provést určitou normalizaci požadavku. U výše uvedeného vzorku by převedený identifikátor URI vypadal takto:

http://www.contoso.com/path/

Služba http.sys zkombinuje Uri.Host hodnotu vlastnosti a řetězec v řádku požadavku a vytvoří převedený identifikátor URI. Kromě toho http.sys a System.Uri třída také proveďte následující akce:

  • Zruší uchycení všech procent zakódovaných hodnot.

  • Převede procenta kódované znaky, které nejsou ASCII, na reprezentaci znaků UTF-16. Všimněte si, že znaky UTF-8 a ANSI/DBCS jsou podporovány i znaky Unicode (kódování Unicode ve formátu %uXXXX).

  • Provede další kroky normalizace, například kompresi cesty.

Vzhledem k tomu, že požadavek neobsahuje žádné informace o kódování použitém pro hodnoty zakódované v procentech, nemusí být možné určit správné kódování pouze parsováním hodnot zakódovaných v procentech.

Proto http.sys poskytuje dva klíče registru pro úpravu procesu:

Klíč registru Výchozí hodnota Description
EnableNonUTF8 1 Pokud je nula, http.sys přijímá pouze adresy URL s kódováním UTF-8.

Pokud není nula, http.sys přijímá v požadavcích také adresy URL kódované ANSI nebo DBCS.
FavorUTF8 1 Pokud není nula, http.sys vždy se nejprve pokusí dekódovat adresu URL jako UTF-8. Pokud se převod nezdaří a EnableNonUTF8 není nulová, Http.sys pak se ji pokusí dekódovat jako ANSI nebo DBCS.

Pokud je nula (a EnableNonUTF8 je nenulová), http.sys pokusí se ji dekódovat jako ANSI nebo DBCS. Pokud to nebude úspěšné, pokusí se o převod UTF-8.

Když HttpListener obdrží požadavek, použije převedený identifikátor URI z jako http.sys vstup do Url vlastnosti.

Kromě znaků a čísel v identifikátorech URI je potřeba mít podpůrné znaky. Příkladem je následující identifikátor URI, který slouží k načtení informací o zákazníkovi pro číslo zákazníka "1/3812":

http://www.contoso.com/Customer('1%2F3812')/

Všimněte si lomítka zakódovaného v procentech v identifikátoru URI (%2F). To je nezbytné, protože v tomto případě lomítko představuje data, nikoli oddělovač cesty.

Předání řetězce konstruktoru URI povede k následujícímu identifikátoru URI:

http://www.contoso.com/Customer('1/3812')/

Rozdělení cesty na její segmenty by vedlo k následujícím prvkům:

Customer('1

3812')

Toto není záměr odesílatele žádosti.

UnescapeRequestUrl Pokud je vlastnost nastavená na false, pak když HttpListener obdrží požadavek, použije nezpracovaný identifikátor URI místo převedeného identifikátoru URI z http.sys jako vstup na Url vlastnost.

Platí pro

Viz také