HttpListenerElement.UnescapeRequestUrl Propriedade

Definição

Obtém um valor que indica se HttpListener usa o URI sem escape bruto em vez do URI convertido.

public:
 property bool UnescapeRequestUrl { bool get(); };
[System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)]
public bool UnescapeRequestUrl { get; }
[<System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)>]
member this.UnescapeRequestUrl : bool
Public ReadOnly Property UnescapeRequestUrl As Boolean

Valor da propriedade

Um valor booliano que indica se HttpListener usa o URI não escapeado bruto, em vez do URI convertido.

Atributos

Comentários

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 serviço http.sys 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 de 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. A documentação do SDK do servidor HTTP refere-se a esse URI convertido como a estrutura HTTP_COOKED_URL .

Para comparar a solicitação com prefixos de URI registrados, é 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