Partager via


HttpListenerRequest.Url Propriété

Définition

Obtient l'objet Uri demandé par le 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

Valeur de propriété

Uri

Objet Uri identifiant la ressource demandé par le client.

Exemples

L’exemple de code suivant illustre l’utilisation de la Url propriété .

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

Remarques

La Url propriété vous permet d’obtenir toutes les informations disponibles à partir d’un Uri objet. Si vous avez besoin de connaître uniquement le texte brut de la demande d’URI, envisagez d’utiliser la propriété à la RawUrl place.

La Url propriété est null si le Uri du client n’a pas pu être analysé.

La UnescapeRequestUrl propriété indique si HttpListener utilise l’URI brut non bouclé au lieu de l’URI converti où toutes les valeurs encodées en pourcentage sont converties et d’autres étapes de normalisation sont effectuées.

Lorsqu’une instance HttpListener reçoit une requête via le service http.sys, elle crée une instance de la chaîne d’URI fournie par http.sys et l’expose en tant que propriété HttpListenerRequest.Url.

Le service http.sys expose deux chaînes d’URI de requête :

  • URI brut

  • URI converti

L’URI brut est le System.Uri fourni dans la ligne de requête d’une requête HTTP :

GET /path/

Host: www.contoso.com

L’URI brut fourni par http.sys pour la requête mentionnée ci-dessus est « /path/ ». Cela représente la chaîne suivant le verbe HTTP tel qu’il a été envoyé sur le réseau.

Le http.sys service crée un URI converti à partir des informations fournies dans la demande à l’aide de l’URI fourni dans la ligne de requête HTTP et de l’en-tête host pour déterminer le serveur d’origine vers lequel la demande doit être transférée. Pour ce faire, les informations de la requête sont comparées à un ensemble de préfixes d’URI inscrits. Pour pouvoir comparer ces valeurs, une normalisation de la demande doit être effectuée. Pour l’exemple ci-dessus, l’URI converti est le suivant :

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

Le service http.sys combine la valeur de propriété Uri.Host et la chaîne de la ligne de requête pour créer un URI converti. En outre, http.sys et la System.Uri classe effectue également les opérations suivantes :

  • Annule l’échappement de toutes les valeurs encodées en pourcentage.

  • Convertit les caractères non ASCII encodés en pourcentage en représentation de caractères UTF-16. Notez que les caractères UTF-8 et ANSI/DBCS sont pris en charge ainsi que les caractères Unicode (encodage Unicode à l’aide du format %uXXXX).

  • Exécute d’autres étapes de normalisation, comme la compression de chemin d’accès.

Étant donné que la requête ne contient aucune information sur l’encodage utilisé pour les valeurs encodées en pourcentage, il peut être impossible de déterminer l’encodage correct en analysant les valeurs encodées en pourcentage.

Par conséquent http.sys fournit deux clés de Registre pour modifier le processus :

Clé de Registre Valeur par défaut Description
EnableNonUTF8 1 Si la valeur est zéro, http.sys accepte uniquement les URL encodées en UTF-8.

Si la valeur est différente de zéro, http.sys accepte également les URL encodées en ANSI ou encodées en DBCS dans les requêtes.
FavorUTF8 1 Si la valeur est différente de zéro, http.sys tente toujours de décoder d’abord une URL en UTF-8 ; si cette conversion échoue et si EnableNonUTF8 est différent de zéro, Http.sys tente de le décoder en ANSI ou en DBCS.

Si la valeur est zéro (et EnableNonUTF8 est différent de zéro), http.sys tente de la décoder en ANSI ou en DBCS ; en cas d’échec, il tente une conversion UTF-8.

Lorsque HttpListener reçoit une requête, il utilise l’URI converti en http.sys comme entrée dans la propriété Url.

Il est nécessaire de prendre en charge certains caractères en plus des caractères et des nombres dans les URI. L’exemple d’URI suivant est utilisé pour récupérer les informations client pour le numéro de client « 1/3812 » :

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

Notez la barre oblique encodée en pourcentage dans l’URI (%2F). Cela est nécessaire, car dans ce cas, le caractère de barre oblique représente des données et non un délimiteur de chemin d’accès.

Le passage de la chaîne au constructeur d’URI entraîne l’URI suivant :

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

Le fractionnement du chemin dans ses segments produit les éléments suivants :

Customer('1

3812')

Cela ne reflète pas l’intention de l’expéditeur de la requête.

Si la propriété a la UnescapeRequestUrl valeur false, lorsque le HttpListener reçoit une requête, il utilise l’URI brut au lieu de l’URI converti comme http.sys entrée dans la Url propriété.

S’applique à

Voir aussi