2010-11-12 15 views
1

Je veux que quelque chose tourne ?a=5&b=8 partie d'une URL dans un dictionnaire {a: 5, b: 8}.ASP.NET MVC parse partie de requête URL

Y at-il une telle méthode dans .net ou suis-je seul?

J'ai besoin d'analyser une partie de requête pour pouvoir mettre en œuvre mon propre décodage d'URL. Le problème est que Firefox utilise un codage différent (UTF8 ou ISO-8859-1) en fonction de l'alphabet utilisé.

Exemple:

Firefox code comme suit:

-           v v 
http://localhost:8041/Reforge.aspx?name=ArcânisГ 
Firefox turns into 
http://localhost:8041/Reforge.aspx?name=Arc%C3%A2nis%D0%93` 

Notez que UTF8 codage est utilisé pour les caractères non-ASCII.

-           v 
http://localhost:8041/Reforge.aspx?name=Arcâ 
Firefox turns into 
http://localhost:8041/Reforge.aspx?name=Arc%E2 

Notez que ISO-8859-1 (Latin-1) le codage est utilisé pour le caractère non-ASCII.

est ici une question connexe: ASP.NET MVC does not understand mixed url encoding (UTF-8/Latin-1)

Répondre

2

Request.QueryString est un NameValueCollection qui est comme un dictionnaire.

Il peut contenir plusieurs valeurs pour la même clé.

Si vient pas de querystring vous pouvez utiliser HttpUtility.ParseQueryString méthode pour obtenir un NameValueCollection

Si vous voulez un vrai dictionnaire "a = 5 & b = 8?":

var d = new Dictionary<String,Object>(); 
this.Request.QueryString.CopyTo(d); 
+0

Le problème avec Request.QueryString est qu'il décode les valeurs aussi, il est déséchapper que je dois gérer. Détails: firefox peut utiliser utf-8 OR latin-1 pour échapper les caractères, mais ASP.Net MVC utilise l'un ou l'autre tout le temps. –

+0

Pouvez-vous écrire un exemple? –

+0

voir l'exemple dans la question –

1

Peut-être un modelbinder personnalisé pour gérer les dictionnaires? Il semble que s'appuyer sur la chaîne de requête, tout en étant parfaitement valide, va à l'encontre de l'esprit du framework. Cela peut également rendre le test de votre action un peu plus difficile. J'ai d'abord pensé que cela était déjà géré par les facilités par défaut de modelbinder, mais cela ne semble pas être le cas. Cela dit, je ne l'ai pas essayé, mais c'est là que je commencerais:

An Intuitive Dictionary Model Binder for ASPnet MVC