parametros - ¿Cómo puedo eliminar el elemento de querystring en asp.net usando c#?
request querystring javascript (14)
Quiero eliminar la cadena de consulta de "Idioma" de mi url. Cómo puedo hacer esto ? (usando Asp.net 3.5, c #)
Default.aspx?Agent=10&Language=2
Quiero eliminar "Idioma = 2", pero el idioma sería el primero, el medio o el último. entonces tendré esto
Default.aspx?Agent=20
Finalmente,
La respuesta de hmemcpy fue totalmente para mí y gracias a otros amigos que respondieron.
Agarro el HttpValueCollection utilizando Reflector y escribí el siguiente código
var hebe = new HttpValueCollection();
hebe.Add(HttpUtility.ParseQueryString(Request.Url.Query));
if (!string.IsNullOrEmpty(hebe["Language"]))
hebe.Remove("Language");
Response.Redirect(Request.Url.AbsolutePath + "?" + hebe );
No deja en claro si está intentando modificar la Querystring en el objeto Request. Dado que esa propiedad es de solo lectura, supongo que asumiremos que solo quieres jugar con la cadena.
... En cuyo caso, es limítrofe trivial.
- tomar la cadena de consulta de la Solicitud
- .split () en ''&''
- vuélvala a juntar en una nueva cuerda, mientras olfatea y tira cualquier cosa que comience con "lenguaje"
Probablemente quiera usar una expresión regular para encontrar el parámetro que desea eliminar de la cadena de consulta, luego eliminarlo y redirigir el navegador al mismo archivo con su nueva cadena de consulta.
Sí, no hay clases integradas en .NET para editar cadenas de consulta. Tendrás que usar Regex u otro método para alterar la cadena.
Si se trata de HttpRequest.QueryString, puede copiar la colección en una colección editable y salirse con la suya.
NameValueCollection filtered = new NameValueCollection(request.QueryString);
filtered.Remove("Language");
Mi preferencia personal aquí es volver a escribir la consulta o trabajar con una colección de valores de nombres en un punto inferior, pero hay momentos en los que la lógica empresarial hace que ninguno de estos sea muy útil y, en ocasiones, la reflexión es realmente lo que necesita. En esas circunstancias, puede apagar la bandera de solo lectura por un momento como ese:
// reflect to readonly property
PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);
// remove
this.Request.QueryString.Remove("foo");
// modify
this.Request.QueryString.Set("bar", "123");
// make collection readonly again
isreadonly.SetValue(this.Request.QueryString, true, null);
Obtenga la colección querystring, analícela en una cadena ( name=value pair
), excluyendo la que desea QUITAR, y asígnele el nombre newQueryString
Luego, llame a Response.Redirect(known_path?newqueryString)
;
Si ya tiene la cadena de consulta como una cadena, también puede usar la manipulación simple de cadenas:
int pos = queryString.ToLower().IndexOf("parameter=");
if (pos >= 0)
{
int pos_end = queryString.IndexOf("&", pos);
if (pos_end >= 0) // there are additional parameters after this one
queryString = queryString.Substring(0, pos) + queryString.Substring(pos_end + 1);
else
if (pos == 0) // this one is the only parameter
queryString = "";
else // this one is the last parameter
queryString=queryString.Substring(0, pos - 1);
}
Prueba esto ...
PropertyInfo isreadonly =typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
isreadonly.SetValue(this.Request.QueryString, false, null);
this.Request.QueryString.Remove("foo");
Aquí hay una manera simple. Reflector no es necesario
public static string GetQueryStringWithOutParameter(string parameter)
{
var nameValueCollection = System.Web.HttpUtility.ParseQueryString(HttpContext.Current.Request.QueryString.ToString());
nameValueCollection.Remove(parameter);
string url = HttpContext.Current.Request.Path + "?" + nameValueCollection;
return url;
}
Aquí se requiere QueryString.ToString()
porque la colección Request.QueryString
es de solo lectura.
bueno, tengo una solución simple, pero hay un poco de javascript involucrado.
suponiendo que Query String es "ok = 1"
string url = Request.Url.AbsoluteUri.Replace("&ok=1", "");
url = Request.Url.AbsoluteUri.Replace("?ok=1", "");
Response.Write("<script>window.location = ''"+url+"'';</script>");
- Reúna su cadena de consulta utilizando
HttpContext.Request.QueryString
. Se predetermina como un tipoNameValueCollection
. - Empléelo como una cadena y use
System.Web.HttpUtility.ParseQueryString()
para analizar la cadena de consulta (que devuelveNameValueCollection
nuevamente). - A continuación, puede usar la función
Remove()
para eliminar el parámetro específico (usando la tecla para hacer referencia a ese parámetro para eliminar). - Utilice el caso de los parámetros de consulta de nuevo en una cadena y use
string.Join()
para formatear la cadena de consulta como algo legible por su URL como parámetros de consulta válidos.
Vea a continuación un ejemplo de trabajo, donde param_to_remove
es el parámetro que desea eliminar.
Digamos que sus parámetros de consulta son param1=1¶m_to_remove=stuff¶m2=2
. Ejecute las siguientes líneas:
var queryParams = System.Web.HttpUtility.ParseQueryString(HttpContext.Request.QueryString.ToString());
queryParams.Remove("param_to_remove");
string queryString = string.Join("&", queryParams.Cast<string>().Select(e => e + "=" + queryParams[e]));
Ahora su cadena de consulta debe ser param1=1¶m2=2
.
Respondí una pregunta similar hace un tiempo. Básicamente, la mejor manera sería usar la clase HttpValueCollection
, que realmente es la propiedad QueryString
, desafortunadamente es interna en .NET Framework. Podría usar Reflector para tomarlo (y colocarlo en su clase de Utils). De esta forma, podría manipular la cadena de consulta como NameValueCollection, pero con todos los problemas de codificación / decodificación de url que se preocupan por usted.
HttpValueCollection
extiende NameValueCollection
, y tiene un constructor que toma una cadena de consulta codificada (signos de unión y signos de interrogación incluidos), y reemplaza un método ToString()
para luego reconstruir la cadena de consulta de la colección subyacente.
string queryString = "Default.aspx?Agent=10&Language=2"; //Request.QueryString.ToString();
string parameterToRemove="Language"; //parameter which we want to remove
string regex=string.Format("(&{0}=[^&/s]+|{0}=[^&/s]+&?)",parameterToRemove);
string finalQS = Regex.Replace(queryString, regex, "");