2011-08-30 48 views
2

如果我打电话NameValueCollection中编辑查询字符串

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

这是由内部HttpValueCollection类完成的,该类继承NameValueCollection并覆盖ToString()
ParseQueryString()是构建这个类的唯一公共方法。

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。还有什么你需要做的吗?

+0

不,我只是很烦,我不得不复制框架中已经存在的代码 – dan