如果我打电话
var nvc = HttpUtility.ParseQueryString("?foo=bar&baz=robots")
我得到一个NameValueCollection,如果我在其上调用ToString,我会返回一个查询字符串。
var str = nvc.ToString(); //foo=bar&baz=robots....
如果我创建一个新的NameValueCollection,向其添加内容,并在其上调用ToString(),我就不会返回查询字符串。
var nvc= new NameValueCollection();
nvc["foo"] = "bar";
var str = nvc.ToString(); //default for Object.ToString()
此外,似乎没有办法构造充当查询字符串编辑器的NameValueCollection。有吗?如果没有,为什么?能够编辑查询字符串是一件非常有用的事情,但是这个功能完全隐藏在大多数人甚至不知道存在的某个对象的模糊模式中。
答案 0 :(得分:2)
这是由内部HttpValueCollection
类完成的,该类继承NameValueCollection
并覆盖ToString()
。
ParseQueryString()
是构建此类的唯一公共方法。
答案 1 :(得分:0)
最后,查询字符串意味着非常简单。所以,你可以这样做:
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)));
当然完全未经测试。但是,查询字符串是由&符分隔的name = value。你还需要做些什么吗?