Salida de un QueryString manipulado en C #
-
04-07-2019 - |
Pregunta
Usando el siguiente código, obtengo una buena cadena con formato:
Request.QueryString.ToString
Me da algo como: & amp; hello = world & amp; microsoft = sucks
Pero cuando uso este código para clonar la colección en otro objeto (del mismo tipo), obtengo el Tipo () del método ToString ().
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Response.Write(variables.ToString());
¿Hay una forma más ordenada de mostrarlo en lugar de buscar y construir la cadena manualmente?
Solución
También puedes usar Reflector para extraer la clase HttpValueCollection
en tu propia clase, y usarla luego.
Otros consejos
HttpValueCollection es interno, pero puedes usar " var " Declararlo sin extraerlo con reflector.
var query = HttpUtility.ParseQueryString(Request.Url.Query);
query["Lang"] = myLanguage; // Add or replace param
string myNewUrl = Request.Url.AbsolutePath + "?" + query;
Porque en realidad es un NVC especial del tipo HTTPValueCollection. Así que cuando llama a .ToString, sabe cómo formatearlo correctamente.
¿Por qué desea copiar la colección QueryString en una nueva NameValueCollection?
if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
Request.QueryString.Remove("sid");
Sí, estoy equivocado, es de solo lectura. Entonces, la esencia es usar el Método Eliminar en su colección de NameValuec:
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Si no necesita absolutamente un NameValueCollection, un diccionario ofrece mucha de la misma semántica:
var variables = Request.QueryString.OfType<DictionaryEntry>()
.Where(entry => entry.Key != "sid")
.ToDictionary(entry => entry.Key, entry => entry.Value);
Request.QueryString en realidad devuelve un objeto HttpValueCollection (que, desafortunadamente, es interno de System.Web, por lo que no puedes hacerlo).
No obstante, HttpValueCollection se deriva de NameValueCollection, y su método Remove () permanece intacto, por lo que debería poder llamar a Request.QueryString.Remove (" sid ");