Cómo obtener una cadena de consulta cuando está URLEncoded o tiene caracteres porcentuales en ASP.NET

StackOverflow https://stackoverflow.com/questions/1638499

Pregunta

¿Cómo obtener la cadena de consulta real del objeto Solicitud cuando la cadena de consulta está codificada en Url o tiene caracteres porcentuales en ASP.NET?

Básicamente, si tengo una URL como esta: Default.aspx? p =% b4 , ¿cómo obtengo una cadena con "% b4 " ;?

Request.QueryString [" p "] devuelve un carácter no imprimible.

Request.RawUrl devuelve Default.aspx? p =% ufffd "

Request.Url.AbsoluteUri devuelve Default.aspx? p =% EF% BF% BD

¿Cómo puedo obtener "% b4 " volver?

¿Fue útil?

Solución

Investigué esto más a fondo y creo que sé lo que está causando esto: un cliente HTTP está enviando una URL al servidor que no está codificada correctamente. Específicamente, hay un carácter no válido en la URL.

Para reproducir, pegue lo siguiente al final de su URL en IE8: default.aspx?p=´

Si examina los bytes que pasan por el cable (por ejemplo, usando Fiddler ), verá un El carácter real de Hex B4 se envía desde el cliente al servidor en la URL. Este es un carácter ilegal en una URL, ya que las URL están limitadas a códigos de caracteres de menos de 0x80 (cualquier código de caracteres de más de 0x80 debe tener un porcentaje de escape).

Entonces, su cliente está pasando un carácter no válido y su servidor está (correctamente) reemplazando el carácter falso con% EF% BF% BD, que es la codificación UTF-8 para Carácter de reemplazo Unicode (U + 0FFD) , que es lo que sucede cuando se encuentra un personaje que no tiene equivalente en la codificación local.

AFAIK, este es un error en IE. Si escribe la misma URL en Firefox, Firefox codificará la URL correctamente (como% b4 en lugar de & # 180;). Tenga en cuenta que, también AFAIK, el problema solo ocurre al pegar manualmente caracteres no válidos en la barra de direcciones de IE; si el mismo carácter está presente en un enlace, IE parece codificar la URL correctamente (al menos en los casos que probé).

¡Entonces debería averiguar quién le está enviando esta URL falsa y decirles que comiencen a codificar sus URL correctamente!

Otros consejos

Asp.net automáticamente decodificará URL cuando haga Request.Querystring [" key "]. Solo necesita codificarlo nuevamente.

HttpUtility.UrlEncode(Request.QueryString["p"])
HttpContext.Current.Request.ServerVariables["QUERY_STRING"]

devolverá la cadena de consulta RAW

Tuve el mismo problema. Lo resolví simplemente agregando javascript " escape ('text% text') " mientras se construye la cadena de consulta!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top