HttpListenerRequest.Url Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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 .