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?

¿Fue útil?

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 ");

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top