Dalla NameValueCollection alla QueryString
Tanti sviluppatori ASP.NET sanno benissimo che possono tirarsi fuori i parametri passati in argomento che si trovano dentro l'oggetto Request.QueryString, visto che assomiglia molto ad un hashtable. Ciononostante la funzionalità non è la stessa che si ha per un generico oggetto NameValueCollection, da cui Request.QueryString è derivata.
Come fare quindi per passare da un oggetto di classe NameValueCollection, già popolato con tutte le sue coppie chiave/valore verso una stringa formattata a regola d'arte con chiavi/valori e con i caratteri speciali opportunamente gestiti?
Effettivamente, se non ci fosse il problema di gestire i caratteri speciali, la cosa si ridurrebbe banalmente ad un problema di concatenazione di stringhe, dove il simbolo & viene utilizzato per la concatenazione, mentre il simbolo = viene utilizzato per separare ogni chiave dal suo rispettivo valore.
Ecco un codice in VB.NET che fa al caso vostro:
Public Shared Function BuildQueryString(ByVal coll as NameValueCollection) As String
Dim name As String
Dim items As New ArrayList
For Each name in coll.AllKeys
items.Add(String.Concat(name,"=",System.Web.HttpUtility.UrlEncode(coll(name))))
Next
Return String.Join("&",DirectCast(items.ToArray(GetType(String())), String())))
End Function
|