NameValueCollection用于编辑查询字符串

时间:2011-08-30 02:51:13

标签: asp.net

如果我打电话

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。有吗?如果没有,为什么?能够编辑查询字符串是一件非常有用的事情,但是这个功能完全隐藏在大多数人甚至不知道存在的某个对象的模糊模式中。

2 个答案:

答案 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。你还需要做些什么吗?