[C#]HttpUtility.ParseQueryString的隐藏密技
时间:2014-07-22 16:48 来源: 我爱IT技术网 作者:山风
在使用 Request.QueryString 发现 ToString 会产生 URL 的 query 字符串,尝试用 NameValueCollection 的 ToString 却不是产生 URL 的 query 字符串,这一整个就很奇怪,明明都是 NameValueCollection 确有不一样的结果,通过 Reflector 发现 Request.QueryString 的 instance 型别是一个 HttpValueCollection,想说可以直接 new HttpValueCollection 出来使用,但 HttpValueCollection 却是 System.Web 的内部 Class,外部是无法直接 new 出来使用,还好在又发现 HttpUtility.ParseQueryString 传递的 NameValueCollection 的 instance 是 HttpValueCollection 这个型别,所以可以通过 HttpUtility.ParseQueryString 来建立 HttpValueCollection。
- // using System.Web;
- var qs1 = HttpUtility.ParseQueryString("id=5&type=1");
- qs1.ToString(); // "id=5&type=1"
- var qs2 = HttpUtility.ParseQueryString(String.Empty);
- qs2["id"] = "11";
- qs2["name"] = "Tom";
- qs2.ToString(); // "id=11&name=Tom"
HttpValueCollection 的签名
- [Serializable]
- internal class HttpValueCollection : NameValueCollection
- {
- }
ParseQueryString 的签名
- public static NameValueCollection ParseQueryString(string query, Encoding encoding)
- {
- if (query == null)
- {
- throw new ArgumentNullException("query");
- }
- if (encoding == null)
- {
- throw new ArgumentNullException("encoding");
- }
- if ((query.Length > 0) && (query[0] == '?'))
- {
- query = query.Substring(1);
- }
- return new HttpValueCollection(query, false, true, encoding);
- }
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
