Estoy recibiendo el error bastante autoexplicativo:
Se detectó un valor Request.Path potencialmente peligroso del cliente (*).
El problema se debe a *
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 resto de la url se relaciona con otros filtros.
¿Hay alguna manera fácil de permitir estos caracteres especiales en la URL? He intentado modificar el web.config
, 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 c# asp.net
aplicación de formularios web que utiliza el enrutamiento para producir la buena URL anterior.
ValidateRequest=false
en la parte superior?Respuestas:
El
*
carácter no está permitido en la ruta de la URL, pero no hay ningún problema al usarlo en la cadena de consulta:No es un problema de codificación, el
*
carácter no tiene un significado especial en una URL, por lo que no importa si la URL la codifica o no. Tendría que codificarlo usando un esquema diferente y luego decodificarlo.Por ejemplo, utilizando un carácter arbitrario como carácter de escape:
Y decodificación:
fuente
PATH
y no en la cadena de consulta.aa
<=>a
yab
<=>*
como un esquema de codificación más simple?Si está utilizando .NET 4.0, debería permitir estas URL a través de web.config
Tenga en cuenta que acabo de eliminar el asterisco (*), la cadena predeterminada original es:
Vea esta pregunta para más detalles.
fuente
Para mí, estoy trabajando en .net 4.5.2 con la API web 2.0, tengo el mismo error, lo configuré simplemente agregando requestPathInvalidCharacters = "" en requestPathInvalidCharacters, debe establecer caracteres no permitidos, de lo contrario, debe eliminar los caracteres que causar 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 descanso, descubrí que en la búsqueda, la ordenación y la paginación, tenemos que manejar el parámetro de consulta de esta manera
y esto resuelve el problema cuando codificamos & y lo reubicamos en la url en% 26 de cualquier manera, en el servidor recibimos el parámetro correcto Digital & Mckinsey
este enlace puede ayudar con las mejores prácticas de diseño de la API de web de descanso https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
fuente
Debe codificar el valor de la ruta y luego (si es necesario) decodificar el valor antes de buscar.
fuente
Para mí, al escribir la url, ¿un usuario usó accidentalmente un / en lugar de un? para iniciar los parámetros de consulta
p.ej:
que debería haber sido:
fuente
Esta excepción ocurrió en mi solicitud y fue bastante engañosa.
Fue lanzado cuando estaba llamando a un método web de página .aspx usando una llamada a método ajax, pasando un objeto de matriz JSON. 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 Actual_Qty del objeto JSON contenía "4" (carácter de espacio adicional). Después de eliminar el espacio extra, la conversión fue posible, el método de página web fue alcanzado con éxito por la llamada ajax.
fuente
Intente configurar el servidor del proyecto web correctamente como Local IIS si es IIS Express. Asegúrese de que la URL del proyecto sea correcta y cree un directorio virtual.
fuente
Cuando se trata de localizadores uniformes de recursos (URL) hay ciertos estándares de sintaxis , en esta situación particular estamos tratando con caracteres reservados .
Hasta RFC 3986 , los caracteres reservados pueden (o no) definirse como delimitadores por la sintaxis genérica, por cada sintaxis específica de esquema o por la sintaxis específica de implementación de un algoritmo de referencia de URI; Y el asterisco (*) es un carácter reservado.
La mejor práctica es utilizar caracteres no reservados en las URL o puede intentar codificarlo.
Sigue cavando :
fuente
%25
lugar de%
, por lo que IIS puede devolver este error para una URL perfectamente válida.