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

首頁 > 編程 > .NET > 正文

Request.QueryString與一般NameValueCollection的區別

2020-01-18 00:34:40
字體:
來源:轉載
供稿:網友
查看了QueryString的定義類型是NameValueCollection,就誤以為這是NameValueCollection的重寫了ToString()的方法,于是放心地將代碼轉移到了業務邏輯層。因為還要重構查詢參數,因此重新構建了一個NameValueCollection,并想當然地用ToString()的結果作為Key。但實際運行之后發現,每次的結果都一樣的,都是第一次的查詢結果。經調試,發現NameValueCollection的ToString()方法并沒有重新,還是返回的是“System.Collections.Specialized.NameValueCollection”。

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

普通NameValueCollection的表現如下

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

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

從查詢字符串內容轉換到NameValueCollection

HttpUtility.ParseQueryString(querystring);(參考http://msdn.microsoft.com/zh-cn/library/ms150046(v=VS.90).aspx),這種方式得到的就是正品QueryString,ToString()后為所實際的值。

從NameValueCollection轉化的為查詢字符串

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

復制代碼 代碼如下:

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

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

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

http://msmvps.com/blogs/paulomorgado/archive/2008/07/15/make-the-httpvaluecollection-class-public-and-move-it-to-system-dll.aspx

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陈巴尔虎旗| 瓦房店市| 托克逊县| 安庆市| 固安县| 武功县| 深泽县| 塔城市| 高邮市| 临江市| 大余县| 天门市| 景宁| 德州市| 石门县| 江门市| 罗田县| 兴义市| 镇康县| 浦江县| 辽阳市| 盘锦市| 溆浦县| 汕头市| 睢宁县| 青龙| 临沂市| 雷波县| 乌拉特前旗| 子洲县| 海盐县| 新蔡县| 星子县| 宁晋县| 扶沟县| 红河县| 长岛县| 泸水县| 武强县| 建宁县| 永胜县|