询问者
求替换Request中的参数值的方法

问题
全部回复
-
第一个问题:
恐怕只有这样做了,因为Request.QueryString是根据url后面的数值获取的,因此你不得不人为变更。
第二个问题:
建议使用(比如删除“foo”这个节点):
ValueCollection params = Request.QueryString; for (int i=0; i<params.Count; i++) { if (params[i].GetKey(i).ToLower() != "foo") { url += string.Concat((i==0 ? "?" : "&"), params[i].GetKey(i), "=", params.Get(i)); } } Response.Redirect(url);
-
第一个问题:
恐怕只有这样做了,因为Request.QueryString是根据url后面的数值获取的,因此你不得不人为变更。
第二个问题:
建议使用(比如删除“foo”这个节点):
ValueCollection params = Request.QueryString; for (int i=0; i<params.Count; i++) { if (params[i].GetKey(i).ToLower() != "foo") { url += string.Concat((i==0 ? "?" : "&"), params[i].GetKey(i), "=", params.Get(i)); } } Response.Redirect(url);
这个还是手动遍历的方法了,C#有没有自带的方法处理参数的修改或删除的方法? -
Request.QueryString.Remove("Key");
- 已标记为答案 happydaily 2012年10月20日 8:35
- 取消答案标记 happydaily 2012年10月20日 8:42
-
肯定是能用的,我看来应该是引用类型的问题,如果能把request.querystring赋值给一个新的NameValueCollection应该可以,就不知道怎么赋?难道又是遍历?
/// <summary> /// 移除参数列表中指定的键值 /// </summary> /// <param name="参数列表"></param> /// <param name="要移除的键名"></param> /// <returns></returns> public static string RemoveQuery(string query, string key) { Regex reg = new Regex(@"\?" + key + "=.*?(?=&|$)", RegexOptions.IgnoreCase); if (reg.IsMatch(query))//处于首 { reg = new Regex(key + @"=.*?[&|$]\b", RegexOptions.IgnoreCase); query = reg.Replace(query, ""); } else//处于中间或末尾 { reg = new Regex("&" + key + ".*?(?=&|$)", RegexOptions.IgnoreCase); query = reg.Replace(query, ""); } return query; } /// <summary> /// 替换参数列表中指定的值 /// </summary> /// <param name="参数列表"></param> /// <param name="被替换的键名"></param> /// <param name="新的值"></param> /// <returns></returns> public static string ReplaceQuery(string query, string key, string newvalue) { Regex reg = new Regex("(?<=" + key + "=).*?(?=&|$)", RegexOptions.IgnoreCase); return reg.Replace(query, newvalue); }
-
我已经赋值过了,貌似NameValueCollection只读的。
尝试:
NameValueCollection col = new NameValueCollection(); foreach(KeyValuePair<string,string> item in Request.QueryString) { col.Add(item.Key,item.Value); }
//col.Remove("YourKey"); //Error here
- 已编辑 ThankfulHeart 2012年10月22日 0:25
-
它不是只读的,只读的原因是直接把request.querystring赋给它,它是个引用类型,而request.querystring是只读的。
NameValueCollection myCol = new NameValueCollection(); myCol.Add("red", "rojo");//如果键值red相同结果合并 rojo,rouge myCol.Add("green", "verde"); myCol.Add("blue", "azul"); myCol.Add("red", "rouge"); myCol.Remove("red"); foreach (string kvp in myCol) { Console.WriteLine(kvp); }