Compartir vía


HttpListenerRequest.Url Propiedad

Definición

Obtiene el objeto Uri solicitado por el cliente.

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

Valor de propiedad

Uri

Un objeto Uri que identifica el recurso solicitado por el cliente.

Ejemplos

En el ejemplo de código siguiente se muestra el uso de la Url propiedad .

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

Comentarios

La Url propiedad permite obtener toda la información disponible de un Uri objeto . Si solo necesita conocer el texto sin formato de la solicitud de URI, considere la posibilidad de usar la RawUrl propiedad en su lugar.

La Url propiedad es null si Uri no se pudo analizar desde el cliente.

La UnescapeRequestUrl propiedad indica si HttpListener usa el URI sin formato sin escape en lugar del URI convertido donde se convierten los valores codificados por porcentajes y se realizan otros pasos de normalización.

Cuando una instancia HttpListener recibe una solicitud a través del servicio http.sys, crea una instancia de la cadena de URI proporcionada por http.sysy la expone como la propiedad HttpListenerRequest.Url.

El servicio http.sys expone dos cadenas de URI de solicitud:

  • URI sin formato

  • URI convertido

El URI sin formato es el System.Uri proporcionado en la línea de solicitud de una solicitud HTTP:

GET /path/

Host: www.contoso.com

El URI sin formato proporcionado por http.sys para la solicitud mencionada anteriormente es "/path/". Representa la cadena que sigue al verbo HTTP tal como se envió a través de la red.

El http.sys servicio crea un URI convertido a partir de la información proporcionada en la solicitud mediante el URI proporcionado en la línea de solicitud HTTP y el encabezado Host para determinar el servidor de origen al que se debe reenviar la solicitud. Para ello, se compara la información de la solicitud con un conjunto de prefijos de URI registrados. Para poder comparar esos valores, es necesario realizar alguna normalización con la solicitud. Para el ejemplo anterior, el URI convertido sería el siguiente:

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

El servicio http.sys combina el valor de propiedad Uri.Host y la cadena de la línea de solicitud para crear un URI convertido. Además, http.sys y la System.Uri clase también hacen lo siguiente:

  • Anula el escape de todos los valores codificados por porcentajes.

  • Convierte caracteres no ASCII codificados por porcentaje en una representación de caracteres UTF-16. Tenga en cuenta que se admiten caracteres UTF-8 y ANSI/DBCS, así como caracteres Unicode (codificación Unicode con el formato %uXXXX).

  • Ejecuta otros pasos de normalización, como la compresión de ruta de acceso.

Dado que la solicitud no contiene ninguna información sobre la codificación usada para los valores codificados por porcentajes, es posible que no sea posible determinar la codificación correcta simplemente mediante el análisis de los valores codificados por porcentajes.

Por lo tanto, http.sys proporciona dos claves del Registro para modificar el proceso:

Clave del Registro Valor predeterminado Descripción
EnableNonUTF8 1 Si es cero, http.sys solo acepta direcciones URL codificadas con UTF-8.

Si no es cero, http.sys también acepta direcciones URL codificadas en ANSI o con codificación DBCS en las solicitudes.
FavorUTF8 1 Si no es cero, http.sys siempre intenta descodificar una dirección URL como UTF-8 en primer lugar; si se produce un error en esa conversión y EnableNonUTF8 es distinto de cero, Http.sys intenta descodificarla como ANSI o DBCS.

Si cero (y EnableNonUTF8 no es cero), http.sys intenta descodificarlo como ANSI o DBCS; si no es correcto, intenta una conversión UTF-8.

Cuando HttpListener recibe una solicitud, usa el URI convertido de http.sys como entrada a la propiedad Url.

Es necesario admitir caracteres además de caracteres y números en URI. Un ejemplo es el siguiente URI, que se usa para recuperar información del cliente para el número de cliente "1/3812":

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

Anote la barra diagonal codificada por porcentaje en el URI (%2F). Esto es necesario, ya que, en este caso, el carácter de barra diagonal representa los datos y no un delimitador de ruta de acceso.

Si se pasa la cadena al constructor URI, se producirá el siguiente URI:

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

Dividir la ruta de acceso en sus segmentos daría lugar a los siguientes elementos:

Customer('1

3812')

Esta no es la intención del remitente de la solicitud.

Si la UnescapeRequestUrl propiedad se establece en false, cuando HttpListener recibe una solicitud, usa el URI sin procesar en lugar del URI convertido de http.sys como entrada a la Url propiedad .

Se aplica a

Consulte también