La sortie d'un manipulés QueryString en C#
En utilisant le code suivant je reçois une jolie chaîne formatée:
Request.QueryString.ToString
Me donne quelque chose comme: &bonjour=le mondeµsoft=suce
Mais lorsque j'utilise ce code pour cloner la collection à un autre objet (de même type), je reçois le Type() de retour de la méthode ToString() à la place.
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Response.Write(variables.ToString());
Est-il plus propre façon de sortie plutôt que de la recherche et de la construction de la chaîne manuellement?
- SI microsoft sucer comme vous l'avez écrit dans l'exemple, pourquoi utilisez-vous les technologies Microsoft?
- Je plaisantais en disant chill
Vous devez vous connecter pour publier un commentaire.
Vous pouvez aussi utiliser Reflector pour extraire le
HttpValueCollection
classe dans votre propre, et de l'utiliser ensuite.HttpValueCollection est interne, mais vous pouvez utiliser "var" de le déclarer sans l'extraire avec réflecteur.
var
ne fait rien pour vous ici, c'est juste la répartition de méthode virtuelle.NameValueCollection values = HttpUtility.ParseQueryString(...)
fonctionnera tout aussi bien. Aussi, je voudrais ajouter un commentaire pour expliquer ce que vous faites.HttpUtility.ParseQueryString("")
fonctionne très bien si vous voulez un vide.NameValueCollection
au lieu devar
? BTW, ça fonctionne pour moi.Request.Url.Query
ouRequest.QueryString.ToString()
. Je suppose queRequest.Url.Query
a une meilleure performance. La seule différence entre ces deux estRequest.Url.Query
de retour avec un point d'interrogation?
en avant, mais heureusementHttpUtility.ParseQueryString()
s'en fout.HttpUtility.ParseQueryString
', non?Parce que c'est en fait un spécial CNV qui est de type HTTPValueCollection.
Ainsi, lorsque vous appelez .ToString sur elle, elle sait comment formater correctement.
Pourquoi voulez-vous copier la collection QueryString dans une nouvelle NameValueCollection?
Oui en effet, je suis dans l'erreur, il est en lecture seule. Donc, l'essentiel est d'utiliser la Méthode Remove sur votre NameValuecollection:
Si vous n'avez pas absolument besoin d'un NameValueCollection, Un dictionnaire offre un lot de la même sémantique:
Demande.QueryString renvoyer en fait un HttpValueCollection objet (qui unfortuately, est interne au Système.Web de sorte que vous ne pouvez-vous pas qu'il).
Néanmoins, HttpValueCollection est dérivé de NameValueCollection, et c'est de la méthode Remove() reste intacte, de sorte que vous devriez être en mesure de Demande d'appel.QueryString.Supprimer("sid");