read querystring query net from aspx asp c# asp.net collections query-string

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.