Come posso rimuovere l’articolo da querystring in asp.net utilizzando c #?

Voglio rimuovere “Language” querystring dal mio url. Come posso fare questo ? (usando Asp.net 3.5, c #)

Default.aspx?Agent=10&Language=2 

Voglio rimuovere “Language = 2”, ma la lingua sarebbe la prima, la seconda o l’ultima. quindi avrò questo

 Default.aspx?Agent=20 

Ho risposto a una domanda simile qualche tempo fa. Fondamentalmente, il modo migliore sarebbe utilizzare la class HttpValueCollection , che in realtà è la proprietà QueryString , sfortunatamente è interna nel framework .NET. Puoi usare Reflector per afferrarlo (e posizionarlo nella tua class Utils). In questo modo è ansible manipolare la stringa di query come un NameValueCollection, ma con tutti i problemi di codifica / decodifica dell’URL occupati per te.

HttpValueCollection estende NameValueCollection e ha un costruttore che accetta una stringa di query codificata (e commerciali e punti interrogativi inclusi) e sostituisce un metodo ToString() per ribuild in seguito la stringa di query dalla raccolta sottostante.

Se è HttpRequest.QueryString, puoi copiare la raccolta in una raccolta scrivibile e utilizzarla.

 NameValueCollection filtered = new NameValueCollection(request.QueryString); filtered.Remove("Language"); 

Ecco un modo semplice. Il riflettore non è necessario.

  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; } 

Qui è richiesto QueryString.ToString() perché la raccolta Request.QueryString è di sola lettura.

Finalmente,

La risposta di hmemcpy è stata totalmente per me e grazie ad altri amici che hanno risposto.

Prendo HttpValueCollection usando Reflector e scrivo il seguente codice

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

La mia preferenza personale qui è riscrivere la query o lavorare con una raccolta dei nomi in un punto più basso, ma ci sono dei momentjs in cui la logica di business non rende nessuno di quelli molto utili e qualche volta la riflessione è davvero ciò di cui hai bisogno. In tali circostanze puoi semplicemente distriggersre la bandiera di sola lettura per un momento in questo modo:

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

Prova questo …

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

Non si chiarisce se si sta tentando di modificare Querystring sul posto nell’object Richiesta. Dato che quella proprietà è di sola lettura, suppongo che assumeremo che tu voglia pasticciare con la stringa.

… In tal caso, è borderline banale.

  • prendi la querystring dalla richiesta
  • .split () su “&”
  • rimettetelo insieme in una nuova stringa, mentre annusate e buttando fuori tutto ciò che inizia con “lingua”

Prendi la collezione querystring, analizzala in una stringa ( name=value pair ), escludendo quella che vuoi rimuovere e nominala newQueryString

Quindi chiama Response.Redirect(known_path?newqueryString) ;

  1. Raccogliere la stringa di query utilizzando HttpContext.Request.QueryString . Il valore predefinito è un tipo NameValueCollection .
  2. Eseguire il cast come stringa e utilizzare System.Web.HttpUtility.ParseQueryString() per analizzare la stringa di query (che restituisce nuovamente un object NameValueCollection ).
  3. È quindi ansible utilizzare la funzione Remove() per rimuovere il parametro specifico (utilizzando il tasto per fare riferimento a tale parametro da rimuovere).
  4. Utilizzare il caso per riportare i parametri di una query su una stringa e utilizzare string.Join() per formattare la stringa di query come qualcosa di leggibile dal proprio URL come parametri di query validi.

Vedi sotto per un esempio funzionante, dove param_to_remove è il parametro che vuoi rimuovere.

Supponiamo che i parametri della tua query siano param1=1&param_to_remove=stuff&param2=2 . Esegui le seguenti linee:

 var queryParams = System.Web.HttpUtility.ParseQueryString(HttpContext.Request.QueryString.ToString()); queryParams.Remove("param_to_remove"); string queryString = string.Join("&", queryParams.Cast().Select(e => e + "=" + queryParams[e])); 

Ora la stringa di query dovrebbe essere param1=1&param2=2 .

Probabilmente vorrai usare un’espressione regolare per trovare il parametro che vuoi rimuovere dalla querystring, quindi rimuoverlo e redirect il browser allo stesso file con la nuova querystring.

Sì, non ci sono classi integrate in .NET per modificare le stringhe di query. Dovrai usare Regex o qualche altro metodo per alterare la stringa stessa.

Se hai già la stringa di query come stringa, puoi anche utilizzare la semplice manipolazione di stringhe:

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

https://regexr.com/3i9vj

bene ho una soluzione semplice, ma c’è un po ‘di coinvolgimento javascript.

supponendo che la stringa di query sia “ok = 1”

  string url = Request.Url.AbsoluteUri.Replace("&ok=1", ""); url = Request.Url.AbsoluteUri.Replace("?ok=1", ""); Response.Write("");