HttpListenerElement.UnescapeRequestUrl 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 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 .