Um valor potencialmente perigoso de Request.Path foi detectado no cliente (*)

Estou recebendo o erro bastante auto-explicativo:

Um valor potencialmente perigoso de Request.Path foi detectado no cliente (*).

O problema é devido a * no URL da solicitação:

 https://stackoverflow.com/Search/test*/0/1/10/1 

Essa url é usada para preencher uma página de pesquisa em que ‘test *’ é o termo de pesquisa e o restante da URL 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 aplicativo de webforms c# asp.net que usa roteamento para produzir a URL legal acima.

O caractere * não é permitido no caminho do URL, mas não há problema em usá-lo na string de consulta:

 http://localhost:3286/Search/?q=test* 

Não é um problema de codificação, o caractere * não tem um significado especial em um URL, portanto, não importa se você codifica ou não o URL. Você precisaria codificá-lo usando um esquema diferente e decodificá-lo.

Por exemplo, usando um caractere arbitrário como caractere de escape:

 query = query.Replace("x", "xxx").Replace("y", "xxy").Replace("*", "xyy"); 

E decodificação:

 query = query.Replace("xyy", "*").Replace("xxy", "y").Replace("xxx", "x"); 

Se você estiver usando o .NET 4.0, você deve poder permitir essas URLs através do web.config

    

Note que acabei de remover o asterisco (*), a string padrão original é:

  

Veja esta questão para mais detalhes.

Você deve codificar o valor da rota e, em seguida, (se necessário) decodificar o valor antes de pesquisar.

Ao lidar com URLs (Uniform Resource Locator), existem certos padrões de syntax , nessa situação específica, estamos lidando com caracteres reservados .

Até o RFC 3986 , os caracteres reservados podem (ou não) ser definidos como delimitadores pela syntax genérica, por cada syntax específica do esquema ou pela syntax específica da implementação de um algoritmo de desreferenciamento do URI; E asterisco (*) é um caractere reservado.

A melhor prática é usar caracteres não reservados em URLs ou você pode tentar codificá-lo usando java.net.URLEncoder .

Continue cavando :

  • Codificação de URL Java de parâmetros de string de consulta
  • Referência de codificação de URL HTML (w3schools)
  • Quando codificar ou decodificar (RFC 3986)
  • Como extrair parâmetros de um determinado URL

Para mim, estou trabalhando em .net 4.5.2 com web api 2.0, eu tenho o mesmo erro, eu defini-lo apenas adicionando requestPathInvalidCharacters = “” no requestPathInvalidCharacters você tem que definir caracteres não permitidos que você tem que remover caracteres que causar este problema.

     ....    

** Note que não é uma boa prática, pode ser um post com este parâmetro como atributo de um object é melhor ou tentar codificar o caractere especial. – Depois de pesquisar as melhores práticas para projetar api de descanso, descobri que na pesquisa, sorting e paginação, temos que manipular o parâmetro de consulta como este

 /companies?search=Digital%26Mckinsey 

e isso resolve o problema quando codificamos e remontamos na URL por% 26 de qualquer forma, no servidor recebemos o parâmetro correto Digital & Mckinsey

este link pode ajudar na melhor prática de projetar o resto da web api https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9

Essa exceção ocorreu no meu aplicativo e foi bastante enganosa.

Ele foi lançado quando eu estava chamando um método da Web de página .aspx usando uma chamada de método ajax, passando um object de matriz JSON. A assinatura do método Web Page continha uma matriz de um object .NET fortemente tipado, OrderDetails. A propriedade Actual_Qty foi definida como um int e a propriedade Actual_Qty do object JSON continha “4” (caractere de espaço extra). Depois de remover o espaço extra, a conversão foi possível, o método da página da Web foi atingido com êxito pela chamada ajax.

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.