在使用 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。
-
-
- var qs1 = HttpUtility.ParseQueryString("id=5&type=1");
- qs1.ToString();
-
- var qs2 = HttpUtility.ParseQueryString(String.Empty);
- qs2["id"] = "11";
- qs2["name"] = "Tom";
-
- qs2.ToString();
// 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
- {
- }
[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);
- }
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);
}
0 回應:
張貼留言