Estou recebendo o erro bastante auto-explicativo:
Um valor Request.Path potencialmente perigoso foi detectado no cliente (*).
O problema ocorre *
no URL da solicitação:
https://stackoverflow.com/Search/test*/0/1/10/1
Esse URL é usado para preencher uma página de pesquisa em que 'teste *' é o termo de pesquisa e o restante está relacionado a vários outros filtros.
Existe uma maneira fácil de permitir esses caracteres especiais no URL? Eu tentei modificar o web.config
, sem sucesso.
Devo codificar / decodificar manualmente os caracteres especiais? Ou existe uma prática recomendada para fazer isso, eu gostaria de evitar o uso de strings de consulta. - mas pode ser uma opção.
O aplicativo em si é um c# asp.net
aplicativo de formulários da web que usa roteamento para produzir a URL agradável acima.
ValidateRequest=false
no topo?Respostas:
O
*
caractere não é permitido no caminho da URL, mas não há problema em usá-lo na string de consulta:Não é um problema de codificação, o
*
caractere não tem significado especial em um URL, portanto, não importa se você o codifica ou não. Você precisaria codificá-lo usando um esquema diferente e decodificá-lo.Por exemplo, usando um caractere arbitrário como caractere de escape:
E decodificação:
fonte
PATH
cadeia de caracteres e não na query.aa
<=>a
eab
<=>*
como um esquema de codificação mais simples?Se você estiver usando o .NET 4.0, poderá permitir esses URLs através do web.config
Observe que acabei de remover o asterisco (*), a string padrão original é:
Veja esta pergunta para mais detalhes.
fonte
Para mim, estou trabalhando no .net 4.5.2 com a API da Web 2.0, tenho o mesmo erro, eu o configurei apenas adicionando requestPathInvalidCharacters = "" no requestPathInvalidCharacters que você precisa definir caracteres não permitidos, caso contrário, você deve remover os caracteres que causar esse problema.
** Observe que não é uma boa prática, pode ser um post com esse parâmetro, pois o atributo de um objeto é melhor ou tente codificar o caractere especial. - Depois de pesquisar as práticas recomendadas para projetar a API de descanso, descobri que na pesquisa, classificação e paginação, temos que lidar com o parâmetro de consulta como este
e isso resolve o problema quando o codificamos e o substituímos no URL em% 26 de qualquer maneira, no servidor recebemos o parâmetro correto Digital & Mckinsey
este link pode ajudar nas melhores práticas de criação de APIs da restante web https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
fonte
Você deve codificar o valor da rota e depois (se necessário) decodificar o valor antes de pesquisar.
fonte
Para mim, ao digitar o URL, um usuário acidentalmente usou um / em vez de um? para iniciar os parâmetros de consulta
por exemplo:
que deveria ter sido:
fonte
Essa exceção ocorreu no meu pedido e foi bastante enganadora.
Foi lançada quando eu estava chamando um método da Web da página .aspx usando uma chamada de método ajax, passando um objeto de matriz JSON. A assinatura do método da página da Web continha uma matriz de um objeto .NET fortemente tipado, OrderDetails. A propriedade Actual_Qty foi definida como int, e a propriedade Actual_Qty do objeto JSON continha "4" (caractere de espaço extra). Após remover o espaço extra, a conversão foi possível, o método de Página da Web foi alcançado com êxito pela chamada ajax.
fonte
Tente definir a propriedade do servidor do projeto da Web como IIS local, se for o IIS Express. Verifique se o URL do projeto está correto e crie um diretório virtual.
fonte
Ao lidar com URLs (Uniform Resource Locator) s, existem certos padrões de sintaxe . Nesta situação específica, estamos lidando com caracteres reservados .
Conforme o RFC 3986 , os caracteres reservados podem (ou não) ser definidos como delimitadores pela sintaxe genérica, por cada sintaxe específica do esquema ou pela sintaxe específica da implementação do algoritmo de desreferenciamento de um URI; E o asterisco (*) é um caractere reservado.
A melhor prática é usar caracteres não reservados em URLs ou tente codificá-lo.
Continue cavando :
fonte
%25
vez de%
, portanto, o IIS poderá retornar esse erro para um URL perfeitamente válido.