Se detectó un valor Request.Path potencialmente peligroso desde el cliente (*)

Estoy recibiendo el error bastante autoexplicativo:

Se detectó un valor de Request.Path potencialmente peligroso desde el cliente (*).

El problema se debe a * en la URL de solicitud:

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

Esta url se usa para completar una página de búsqueda donde ‘test *’ es el término de búsqueda y el rest de la URL se relaciona con varios otros filtros.

¿Hay alguna manera fácil de permitir estos caracteres especiales en la URL? Intenté modificar el web.config , pero fue en vano.

¿Debo codificar / decodificar manualmente los caracteres especiales? O hay una mejor práctica para hacer esto, me gustaría evitar el uso de cadenas de consulta. – pero puede ser una opción.

La aplicación en sí es una aplicación webforms de c# asp.net que utiliza el enrutamiento para producir la bonita URL anterior.

El carácter * no está permitido en la ruta de la URL, pero no hay problema al usarlo en la cadena de consulta:

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

No es un problema de encoding, el carácter * no tiene un significado especial en una URL, por lo que no importa si la URL lo codifica o no. Debería codificarlo usando un esquema diferente y luego decodificarlo.

Por ejemplo, usando un carácter arbitrario como carácter de escape:

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

Y deencoding:

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

Si está utilizando .NET 4.0, debe poder permitir estas URL a través de la web.config

    

Tenga en cuenta que acabo de eliminar el asterisco (*), la cadena predeterminada original es:

  

Vea esta pregunta para más detalles.

Debe codificar el valor de ruta y luego (si es necesario) decodificar el valor antes de buscar.

Cuando se trata de Uniform Resource Locator (URL) existen ciertos estándares de syntax , en esta situación particular, estamos tratando con Caracteres Reservados .

Como hasta RFC 3986 , los Caracteres Reservados pueden (o no) definirse como delimitadores por la syntax genérica, por cada syntax específica del esquema, o por la syntax específica de implementación del algoritmo de desreferenciación de un URI; Y el asterisco (*) es un personaje reservado.

La mejor práctica es utilizar caracteres sin reserva en las URL o puede intentar codificar utilizando java.net.URLEncoder .

Sigue cavando :

  • Codificación de URL Java de parámetros de cadena de consulta
  • Referencia de encoding de URL HTML (w3schools)
  • Cuándo codificar o descodificar (RFC 3986)
  • Cómo extraer parámetros de una URL determinada

Para mí, estoy trabajando en .net 4.5.2 con web api 2.0, tengo el mismo error, lo configuré simplemente agregando requestPathInvalidCharacters = “” en requestPathInvalidCharacters tienes que establecer caracteres no permitidos, de lo contrario debes eliminar caracteres que causa este problema

     ....    

** Tenga en cuenta que no es una buena práctica, puede ser una publicación con este parámetro ya que el atributo de un objeto es mejor o tratar de codificar el carácter especial. – Después de buscar las mejores prácticas para diseñar la API de reposo, encontré que en la búsqueda, clasificación y paginación, tenemos que manejar el parámetro de consulta como este

 /companies?search=Digital%26Mckinsey 

y esto resuelve el problema cuando codificamos y volvemos a colocarlo en la URL en% 26 de cualquier forma, en el servidor recibimos el parámetro correcto Digital & Mckinsey

este enlace puede ayudar a las mejores prácticas de diseño de la API de descanso https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9

Esta excepción se produjo en mi solicitud y fue bastante engañosa.

Se lanzó cuando estaba llamando a un método Web de página .aspx utilizando una llamada al método ajax, pasando un objeto JSON Array. La firma del método de la Página web contenía una matriz de un objeto .NET fuertemente tipado, OrderDetails. La propiedad Actual_Qty se definió como un int, y la propiedad del objeto JSON Actual_Qty contenía “4” (carácter de espacio adicional). Después de eliminar el espacio adicional, la conversión fue posible, el método de la página web fue alcanzado con éxito por la llamada ajax.

Intente configurar el servidor del proyecto web como IIS Local si es IIS Express. Asegúrese de que la URL del proyecto sea correcta y cree un directorio virual.