net - Salida de un QueryString manipulado en c#
request string asp net (6)
¿Por qué quiere copiar la colección QueryString en una nueva NameValueCollection?
if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
Request.QueryString.Remove("sid");
Sí, de hecho, estoy equivocado, es de solo lectura. Entonces, la esencia es usar el Método de Eliminar en su Colección NameValue:
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Usando el siguiente código, obtengo una buena cadena formateada:
Request.QueryString.ToString
Me da algo como: & hello = world & microsoft = chupa
Pero cuando uso este código para clonar la colección a otro objeto (del mismo tipo), obtengo el Tipo () en su lugar desde el 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 alguna manera más ordenada de mostrarlo en lugar de buscar y construir la cadena manualmente?
Porque en realidad es un NVC especial que es de tipo HTTPValueCollection. Entonces, cuando llamas a .ToString, sabe cómo formatearlo correctamente.
Request.QueryString realmente devuelve un objeto HttpValueCollection (que desafortunadamente, es interno a System.Web así que no puedes).
Sin embargo, HttpValueCollection se deriva de NameValueCollection, y su método Remove () permanece intacto, por lo que debería poder invocar Request.QueryString.Remove ("sid");
Si no necesitas absolutamente una 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);
HttpValueCollection es interno, pero puede usar "var" para 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;
También puede usar Reflector para extraer la clase HttpValueCollection
en la suya y luego usarla.