NameValueCollection for editing query strings
If I call
var nvc = HttpUtility.ParseQueryString("?foo=bar&baz=robots")
I get back a NameValueCollection where if I call ToString on it, I get back a query string.
var str = nvc.ToString(); //foo=bar&baz=robots....
If I create a new NameValueCollection, add stuf开发者_开发百科f to it, and call ToString() on it, I don't get back a query string.
var nvc= new NameValueCollection();
nvc["foo"] = "bar";
var str = nvc.ToString(); //default for Object.ToString()
Also there doesn't seem to be a way to construct a NameValueCollection that acts as a query string editor. Is there one? If not, why? Being able to edit query strings is a pretty useful thing, but this functionality is totally hidden away in an obscure mode of some object most people don't even know exists.
This is done by the internal HttpValueCollection
class, which inherits NameValueCollection
and overrides ToString()
.
ParseQueryString()
is the only public way to construct this class.
In the end, query strings are meant to be very simple. So, you can just do something like this:
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("somekey", "someval");
var querystring = string.Join("&", dict.Select(kv => HttpUtility.UrlEncode(kv.Key) + "=" + HttpUtility.UrlEncode(kv.Value)));
Completely untested of course. But yeah, a query string is name=value separated by ampersands. Is there something else you need to do?
精彩评论