HttpListenerRequest.Url Propriedade

Definição

Obtém o objeto Uri solicitado pelo 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 da propriedade

Uri

Um objeto Uri que identifica o recurso solicitado pelo cliente.

Exemplos

O exemplo de código a seguir demonstra o uso da Url propriedade .

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

Comentários

A Url propriedade permite que você obtenha todas as informações disponíveis de um Uri objeto . Se você precisar saber apenas o texto bruto da solicitação de URI, considere usar a RawUrl propriedade em vez disso.

A Url propriedade será nula se o Uri do cliente não puder ser analisado.

A UnescapeRequestUrl propriedade indica se HttpListener usa o URI não escapeado bruto em vez do URI convertido em que quaisquer valores codificados por porcentagem são convertidos e outras etapas de normalização são executadas.

Quando uma instância HttpListener recebe uma solicitação por meio do serviço http.sys, ela cria uma instância da cadeia de caracteres de URI fornecida por http.sys e a expõe como a propriedade HttpListenerRequest.Url.

O serviço http.sys expõe duas cadeias de caracteres de URI de solicitação:

  • URI bruto

  • URI convertido

O URI bruto é o System.Uri fornecido na linha de solicitação de uma solicitação HTTP:

GET /path/

Host: www.contoso.com

O URI bruto fornecido por http.sys para solicitação mencionada acima é "/path/". Isso representa a cadeia de caracteres seguindo o verbo HTTP quando foi enviada pela rede.

O http.sys serviço cria um URI convertido das informações fornecidas na solicitação usando o URI fornecido na linha de solicitação HTTP e o cabeçalho Host para determinar o servidor de origem para o qual a solicitação deve ser encaminhada. Isso é feito comparando as informações da solicitação com um conjunto de prefixos do URI registrados. Para poder comparar esses valores, é necessário fazer alguma normalização com a solicitação. Para o exemplo acima, o URI convertido seria o seguinte:

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

O serviço http.sys combina o valor da propriedade Uri.Host e a cadeia de caracteres na linha de solicitação para criar um URI convertido. Além disso, http.sys e a System.Uri classe também fazem o seguinte:

  • Cancela o escape de todos os valores codificados por percentual.

  • Converte caracteres não ASCII codificados por percentual em uma representação de caracteres UTF-16. Observe que há suporte para caracteres UTF-8 e ANSI/DBCS, bem como caracteres Unicode (codificação Unicode usando o formato %uXXXX).

  • Executa outras etapas de normalização, como compactação de caminho.

Como a solicitação não contém informações sobre a codificação usada para valores codificados por percentual, talvez não seja possível determinar a codificação correta apenas analisando os valores codificados por percentual.

Portanto, http.sys fornece duas chaves do Registro para modificar o processo:

Chave do Registro Valor padrão Descrição
EnableNonUTF8 1 Se for zero, http.sys aceitará apenas URLs codificadas em UTF-8.

Se não for zero, http.sys também aceitará URLs codificadas em ANSI ou codificadas em DBCS em solicitações.
FavorUTF8 1 Se não for zero, http.sys sempre tentará decodificar uma URL como UTF-8 primeiro; se essa conversão falhar e EnableNonUTF8 não for zero, Http.sys tentará decodificá-la como ANSI ou DBCS.

Se zero (e EnableNonUTF8 não for zero), http.sys tentará decodificá-lo como ANSI ou DBCS; se isso não for bem-sucedido, ele tentará uma conversão UTF-8.

Quando HttpListener recebe uma solicitação, ela usa o URI convertido de http.sys como entrada para a propriedade Url.

Há a necessidade de dar suporte a caracteres além de caracteres e números em URIs. Um exemplo é o seguinte URI, que é usado para recuperar informações do cliente para o número do cliente "1/3812":

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

Observe a barra codificada por percentual no Uri (%2F). Isso é necessário, pois, nesse caso, o caractere de barra representa dados, não um delimitador de caminho.

Passar a cadeia de caracteres para o construtor Uri levará ao seguinte URI:

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

Dividir o caminho em seus segmentos resultaria nos seguintes elementos:

Customer('1

3812')

Essa não é a intenção do remetente da solicitação.

Se a UnescapeRequestUrl propriedade for definida como false, quando o HttpListener receber uma solicitação, ela usará o URI bruto em vez do URI convertido de http.sys como entrada para a Url propriedade .

Aplica-se a

Confira também