Comment obtenir une chaîne de requête quand elle est URLEncodée ou a un pourcentage de caractères dans ASP.NET

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

Question

Comment obtenir la chaîne de requête réelle à partir de l'objet Request lorsque la chaîne de requête est UrlEncoded ou comporte un pourcentage de caractères dans ASP.NET?

En gros, si j'ai une URL comme ceci: Default.aspx? p =% b4 , comment puis-je obtenir une chaîne remplie avec "% b4"?

Request.QueryString [" p]] renvoie un caractère non imprimable.

Request.RawUrl retourne Default.aspx? p =% ufffd " <

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

Comment puis-je obtenir "% b4"? retour?

Était-ce utile?

La solution

J'ai approfondi cette question et je pense en connaître la cause: un client HTTP soumet au serveur une URL qui n'est pas correctement codée. Plus précisément, l'URL contient un caractère non valide.

À des fins de repro, collez le texte suivant à la fin de votre URL dans IE8: default.aspx? p = ´

Si vous examinez les octets parcourant le réseau (par exemple, en utilisant Fiddler ), vous verrez un Le caractère Hex B4 réel est envoyé du client au serveur dans l'URL. Il s'agit d'un caractère illégal dans une URL, car les URL sont limitées aux codes de caractères sous 0x80 (tous les codes de caractères supérieurs à 0x80 doivent avoir un échappement en pourcentage).

Votre client transmet donc un caractère non valide et votre serveur remplace (correctement) le caractère fictif par% EF% BF% BD, qui est le codage UTF-8 du Caractère de remplacement Unicode (U + 0FFD) , ce qui se produit lorsqu'un personnage rencontré n'a pas d'équivalent dans le codage local.

Si je comprends bien, il s'agit d'un bogue dans IE. Si vous tapez la même URL dans Firefox, Firefox l'encodera correctement (en tant que% b4 au lieu de ´). Notez aussi que, autant que je sache, le problème ne survient que lorsque l'on colle manuellement des caractères non valides dans la barre d'adresse d'IE: si le même caractère est présent dans un lien, IE semble coder correctement l'URL (au moins dans les cas que j'ai testés).

Vous devez donc déterminer qui vous envoie cette fausse URL et leur dire de commencer à coder correctement leurs URL!

Autres conseils

Asp.net va automatiquement décoder l'URL lorsque vous exécutez Request.Querystring [" clé &];]. Vous avez juste besoin de l'encoder à nouveau.

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

renverra la chaîne de requête RAW

J'ai eu le même problème. Je l'ai résolu en ajoutant simplement du javascript " escape ('text% text') " tout en construisant la chaîne de requête!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top