I want remove “Language” querystring from my url. How can I do this? (using Asp.net 3.5 , c#)
Default.aspx?Agent=10&Language=2
I want to remove “Language=2”, but language would be the first,middle or last. So I will have this
Default.aspx?Agent=20
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
If it’s the HttpRequest.QueryString then you can copy the collection into a writable collection and have your way with it.
NameValueCollection filtered = new NameValueCollection(request.QueryString); filtered.Remove("Language");
Method 2
Here is a simple way. Reflector is not needed.
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; }
Here
QueryString.ToString()
is required because Request.QueryString
collection is read only.
Method 3
Finally,
hmemcpy answer was totally for me and thanks to other friends who answered.
I grab the HttpValueCollection using Reflector and wrote the following code
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 );
Method 4
My personal preference here is rewriting the query or working with a namevaluecollection at a lower point, but there are times where the business logic makes neither of those very helpful and sometimes reflection really is what you need. In those circumstances you can just turn off the readonly flag for a moment like so:
// 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);
Method 5
I answered a similar question a while ago. Basically, the best way would be to use the class HttpValueCollection
, which the QueryString
property actually is, unfortunately it is internal in the .NET framework.
You could use Reflector to grab it (and place it into your Utils class). This way you could manipulate the query string like a NameValueCollection, but with all the url encoding/decoding issues taken care for you.
HttpValueCollection
extends NameValueCollection
, and has a constructor that takes an encoded query string (ampersands and question marks included), and it overrides a ToString()
method to later rebuild the query string from the underlying collection.
Method 6
Try this …
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");
Method 7
- Gather your query string by using
HttpContext.Request.QueryString
. It defaults as aNameValueCollection
type. - Cast it as a string and use
System.Web.HttpUtility.ParseQueryString()
to parse the query string (which returns aNameValueCollection
again). - You can then use the
Remove()
function to remove the specific parameter (using the key to reference that parameter to remove). - Use case the query parameters back to a string and use
string.Join()
to format the query string as something readable by your URL as valid query parameters.
See below for a working example, where param_to_remove
is the parameter you want to remove.
Let’s say your query parameters are param1=1¶m_to_remove=stuff¶m2=2
. Run the following lines:
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]));
Now your query string should be
param1=1¶m2=2
.
Method 8
You don’t make it clear whether you’re trying to modify the Querystring in place in the Request object. Since that property is read-only, I guess we’ll assume you just want to mess with the string.
… In which case, it’s borderline trivial.
- grab the querystring off the Request
- .split() it on ‘&’
- put it back together into a new string, while sniffing for and tossing out anything starting with “language”
Method 9
Get the querystring collection, parse it into a (name=value pair
) string, excluding the one you want to REMOVE, and name it newQueryString
Then call Response.Redirect(known_path?newqueryString)
;
Method 10
You’re probably going to want use a Regular Expression to find the parameter you want to remove from the querystring, then remove it and redirect the browser to the same file with your new querystring.
Method 11
Yes, there are no classes built into .NET to edit query strings. You’ll have to either use Regex or some other method of altering the string itself.
Method 12
If you have already the Query String as a string, you can also use simple string manipulation:
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); }
Method 13
well I have a simple solution , but there is a little javascript involve.
assuming the Query String is “ok=1”
string url = Request.Url.AbsoluteUri.Replace("&ok=1", ""); url = Request.Url.AbsoluteUri.Replace("?ok=1", ""); Response.Write("<script>window.location = '"+url+"';</script>");
Method 14
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
Method 15
Parse Querystring into a NameValueCollection. Remove an item. And use the toString to convert it back to a querystring.
using System.Collections.Specialized; NameValueCollection filteredQueryString = System.Web.HttpUtility.ParseQueryString(Request.QueryString.ToString()); filteredQueryString.Remove("appKey"); var queryString = '?'+ filteredQueryString.ToString();
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0