HttpListenerRequest.Url Proprietà

Definizione

Ottiene l'oggetto Uri richiesto dal client.

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

Valore della proprietà

Uri

Oggetto Uri che identifica la risorsa richiesta dal client.

Esempio

Nell'esempio di codice seguente viene illustrato l'utilizzo della Url proprietà .

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

Commenti

La Url proprietà consente di ottenere tutte le informazioni disponibili da un Uri oggetto . Se è necessario conoscere solo il testo non elaborato della richiesta URI, è consigliabile usare la RawUrl proprietà .

La Url proprietà è Null se non è stato possibile analizzare l'oggetto Uri dal client.

La UnescapeRequestUrl proprietà indica se HttpListener utilizza l'URI non elaborato senza caratteri di escape anziché l'URI convertito in cui vengono convertiti valori con codifica percentuale e vengono eseguiti altri passaggi di normalizzazione.

Quando un'istanza HttpListener riceve una richiesta tramite il http.sys servizio, crea un'istanza della stringa URI fornita da http.syse la espone come HttpListenerRequest.Url proprietà .

Il http.sys servizio espone due stringhe URI di richiesta:

  • URI non elaborato

  • URI convertito

L'URI non elaborato è l'oggetto System.Uri fornito nella riga di richiesta di una richiesta HTTP:

GET /path/

Host: www.contoso.com

L'URI non elaborato fornito da http.sys per la richiesta menzionata in precedenza è "/path/". Rappresenta la stringa che segue il verbo HTTP inviato in rete.

Il http.sys servizio crea un URI convertito dalle informazioni fornite nella richiesta usando l'URI fornito nella riga della richiesta HTTP e l'intestazione Host per determinare il server di origine a cui deve essere inoltrata la richiesta. Questa operazione viene eseguita confrontando le informazioni della richiesta con un set di prefissi URI registrati. Per poter confrontare tali valori, è necessario eseguire alcune normalizzazione alla richiesta. Per l'esempio precedente l'URI convertito sarà il seguente:

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

Il http.sys servizio combina il valore della Uri.Host proprietà e la stringa nella riga della richiesta per creare un URI convertito. Inoltre, http.sys e la System.Uri classe eseguono anche le operazioni seguenti:

  • Annulla l'escape di tutti i valori codificati in percentuale.

  • Converte i caratteri non ASCII con codifica percentuale in una rappresentazione di caratteri UTF-16. Si noti che i caratteri UTF-8 e ANSI/DBCS sono supportati e i caratteri Unicode (codifica Unicode usando il formato %uXXXX).

  • Esegue altri passaggi di normalizzazione, ad esempio la compressione del percorso.

Poiché la richiesta non contiene informazioni sulla codifica usata per i valori con codifica percentuale, potrebbe non essere possibile determinare la codifica corretta semplicemente analizzando i valori con codifica percentuale.

Vengono pertanto http.sys fornite due chiavi del Registro di sistema per modificare il processo:

Chiave del Registro di sistema Valore predefinito Descrizione
EnableNonUTF8 1 Se zero, http.sys accetta solo GLI URL con codifica UTF-8.

Se diverso da zero, http.sys accetta anche URL con codifica ANSI o con codifica DBCS nelle richieste.
FavorUTF8 1 Se non è zero, http.sys tenta sempre di decodificare un URL come UTF-8. Se la conversione ha esito negativo e EnableNonUTF8 è diverso da zero, Http.sys quindi prova a decodificarla come ANSI o DBCS.

Se zero (e EnableNonUTF8 è diverso da zero), http.sys tenta di decodificarlo come ANSI o DBCS. In caso contrario, prova una conversione UTF-8.

Quando HttpListener riceve una richiesta, usa l'URI convertito da http.sys come input alla Url proprietà .

È necessario supportare caratteri oltre a caratteri e numeri negli URI. Un esempio è l'URI seguente, che viene usato per recuperare le informazioni sul cliente per il numero cliente "1/3812":

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

Si noti la barra con codifica percentuale nell'URI (%2F). Ciò è necessario, poiché in questo caso il carattere barra rappresenta i dati e non un delimitatore di percorso.

Il passaggio della stringa al costruttore URI comporterà l'URI seguente:

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

La suddivisione del percorso nei segmenti comporta gli elementi seguenti:

Customer('1

3812')

Questa non è la finalità del mittente della richiesta.

Se la UnescapeRequestUrl proprietà è impostata su false, quando riceve HttpListener una richiesta, usa l'URI non elaborato anziché l'URI convertito da http.sys come input alla Url proprietà .

Si applica a

Vedi anche