Using the following code I get a nice formatted string:
Request.QueryString.ToString
Gives me something like: &hello=worldµsoft=sucks
But when I use this code to clone the collection to another object (of the same type) I get the Type() back from the ToString() method instead.
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Response.Write(variables.ToString());
Is there a tidier way to output it rather than looking and building the string manually?
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
HttpValueCollection is internal, but you can use “var” to declare it without extract it with reflector.
var query = HttpUtility.ParseQueryString(Request.Url.Query); query["Lang"] = myLanguage; // Add or replace param string myNewUrl = Request.Url.AbsolutePath + "?" + query;
Method 2
You can also use Reflector to extract the HttpValueCollection class into your own, and use it then.
Method 3
Because it is actually a special NVC that is of type HTTPValueCollection.
So when you call .ToString on it, it knows how to format it correctly.
Method 4
Why do you want to copy the QueryString collection into a new NameValueCollection?
if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
Request.QueryString.Remove("sid");
Yes indeed, i am wrong, it is read only. So the essence is to use the Remove Method on your NameValuecollection:
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Method 5
If you don’t absolutely need a NameValueCollection, A dictionary offers a lot of the same semantics:
var variables = Request.QueryString.OfType<DictionaryEntry>()
.Where(entry => entry.Key != "sid")
.ToDictionary(entry => entry.Key, entry => entry.Value);
Method 6
Request.QueryString actually return a HttpValueCollection object (which unfortuately, is internal to System.Web so you can’t you it).
Nevertheless, HttpValueCollection is derived from NameValueCollection, and it’s Remove() method remains intact, so you should be able to call Request.QueryString.Remove(“sid”);
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