主页 > 知识库 > Request.QueryString与一般NameValueCollection的区别

Request.QueryString与一般NameValueCollection的区别

热门标签:地图标注多个行程 海外地图标注门市标 厦门商铺地图标注 云南外呼电销机器人系统 山西防封卡电销卡套餐 浙江外呼系统怎么安装 铜川小型外呼系统运营商 上海杨浦怎么申请申请400电话 陕西人工外呼系统哪家好
查看了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

您可能感兴趣的文章:
  • asp下request.querystring("id")与request("id")区别
  • asp.net下Request.QueryString取不到值的解决方法
  • 循环取值Request.QueryString的用法
  • 从客户端检测到有潜在危险的Request.Form值的asp.net代码
  • asp.net 从客户端中检测到有潜在危险的 Request.Form 值错误解
  • ASP.NET中Request.Form中文乱码的解决方法
  • ASP读取Request.QueryString编码的函数代码
  • asp.net中Request.QueryString与Request.Param的区别分析
  • 有潜在危险的 Request.Form 值避免方法
  • ASP.NET从客户端中检测到有潜在危险的request.form值的3种解决方法
  • ASP.NET检测到不安全 Request.Form 值解决方案汇总
  • Jquery中request和request.form和request.querystring的区别

标签:西双版纳 常州 孝感 信阳 朔州 莱芜 自贡 许昌

巨人网络通讯声明:本文标题《Request.QueryString与一般NameValueCollection的区别》,本文关键词  Request.QueryString,与,一般,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Request.QueryString与一般NameValueCollection的区别》相关的同类信息!
  • 本页收集关于Request.QueryString与一般NameValueCollection的区别的相关信息资讯供网民参考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推荐文章