QueryString malformés après URLDecode

Je suis en train de passer une chaîne en Base64 C#.Net application web via la chaîne de Requête. Lorsque la chaîne arrive le "+" (plus) signe est remplacé par un espace. Il semble que l'automatique URLDecode processus est en train de faire cela. Je n'ai aucun contrôle sur ce qui est transmis par la chaîne de Requête. Est-il possible de gérer ce serveur?

Exemple:

http://localhost:3399/Base64.aspx?VLTrap=VkxUcmFwIHNldCB0byAiRkRTQT8+PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

Produit:

VkxUcmFwIHNldCB0byAiRkRTQT8 PE0iIHBsdXMgb3IgbWludXMgNSBwZXJjZW50Lg==

De gens ont suggéré Encodage de la querystring:

System.Web.HttpUtility.UrlEncode(yourString) 

Je ne peux pas le faire car je n'ai pas de contrôle sur l'appel de la routine (qui fonctionne bien avec d'autres langues).

Il y a aussi la suggestion de remplacer les espaces par un signe plus:

Request.QueryString["VLTrap"].Replace(" ", "+");

J'ai eu bien de cela, mais mon souci avec elle, et je devrais avoir parlé à démarrer, c'est que je ne sais pas ce que autres caractères risquent d'être mal formé, en plus du signe plus.

Mon objectif principal est d'intercepter la chaîne de Requête avant de l'exécuter via le décodeur.

À cette fin, j'ai essayé de regarder à la Demande.QueryString.toString (), mais cette contenaient la même incorrect de l'information. Est-il possible de regarder le raw QueryString avant il est URLDecoded?

Après d'autres tests, il semble que .Net s'attend à tout venant de la QuerString être codées dans l'URL, mais le navigateur ne prend pas automatiquement les encoder les requêtes GET.

OK, alors maintenant, je suis complètement à la perte, à la façon DONC il fonctionne. La question stipule explicitement qu'il n'y a aucun moyen de changer ce qui est passé dans la chaîne de Requête, mais toutes les réponses correctes (c'est à dire, remplacer l'espace avec plus avant base64-décodage) ont été rejetés. Allez comprendre...

OriginalL'auteur pdavis | 2008-09-23