2011-08-30 66 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