国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Request.QueryString與一般NameValueCollection的區(qū)別

2024-07-10 13:24:34
字體:
供稿:網(wǎng)友
查看了QueryString的定義類型是NameValueCollection,就誤以為這是NameValueCollection的重寫了ToString()的方法,于是放心地將代碼轉(zhuǎn)移到了業(yè)務邏輯層。因為還要重構(gòu)查詢參數(shù),因此重新構(gòu)建了一個NameValueCollection,并想當然地用ToString()的結(jié)果作為Key。但實際運行之后發(fā)現(xiàn),每次的結(jié)果都一樣的,都是第一次的查詢結(jié)果。經(jīng)調(diào)試,發(fā)現(xiàn)NameValueCollection的ToString()方法并沒有重新,還是返回的是“System.Collections.Specialized.NameValueCollection”。

  先看看調(diào)試時的情況,發(fā)現(xiàn)QueryString的實際類型是System.Web.HttpValueCollection,該類型繼承自NameObjectCollectionBase,跟NameValueCollection的基類是一樣的。那么最有可能的就是QueryString直接繼承了NameValueCollection,并且重寫了ToString()的方法。

Request.QueryString與一般NameValueCollection的區(qū)別

普通NameValueCollection的表現(xiàn)如下

根據(jù)以上判斷基本為什么QueryString表面上看起來是NameValueCollection但又實際上表現(xiàn)出不同的ToString表現(xiàn)。

  接下來繼續(xù)了解一下System.Web.HttpValueCollection是何方神圣。該類用起來似乎很方便,也嘗試在代碼中使用,但提示找不到類。在MSDN中也沒有明確該類的記錄,可以基本判定為私有的類型或者受保護的。搜索之后發(fā)現(xiàn),該類是的完整定義是System.Web.HttpValueCollection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,只能通過反射的方式訪問或修改該類型。因此想用這個類的話,基本上是比較麻煩,不太值得。但是在一般開發(fā)者眼中,都希望查詢字符串的和NameValueCollection能很順暢的進行呼喚,通過ToString()的簡單方式就能獲得。目前要實現(xiàn)兩者的轉(zhuǎn)換有以下方式

從查詢字符串內(nèi)容轉(zhuǎn)換到NameValueCollection

HttpUtility.ParseQueryString(querystring);(參考(v=VS.90).aspx),這種方式得到的就是正品QueryString,ToString()后為所實際的值。

從NameValueCollection轉(zhuǎn)化的為查詢字符串

只能遍歷NameValueCollection,然后自個拼出一個查詢字符串了

復制代碼 代碼如下:


foreach (string key in c.Keys)
{
sb.AppendFormat("{0}={1}", key, c[key]);
}


但實際上我們希望有更自然的方式,因為往往我們跟樂于操作可讀寫的NameValueCollection,而不是只讀的QueryString。

老外對此也提出了意見,具體可參考

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄石市| 尼勒克县| 拉萨市| 大荔县| 平舆县| 浦县| 寿宁县| 洛扎县| 华安县| 六安市| 全椒县| 临安市| 望都县| 乡城县| 马尔康县| 京山县| 香河县| 宁蒗| 望谟县| 景谷| 汝阳县| 鹤山市| 贡山| 博野县| 和平区| 岳西县| 周宁县| 沭阳县| 南乐县| 莱芜市| 肥城市| 屏东市| 习水县| 安义县| 灵台县| 四平市| 松滋市| 内江市| 峨眉山市| 隆安县| 得荣县|