在我的基页中,我需要从查询字符串中删除一个项目并重定向.我不能用
Request.QueryString.Remove("foo")
因为该集合是只读的.有没有办法获取查询字符串(除了那一项)而不迭代整个集合并重新构建它?
您可以通过处理原始查询字符串来避免触及原始查询字符串.然后,您可以将页面重定向到包含修改后的查询字符串的URL,如下所示:
var nvc = new NameValueCollection(); nvc.Add(HttpUtility.ParseQueryString(Request.Url.Query)); nvc.Remove("foo"); string url = Request.Url.AbsolutePath; for (int i = 0; i < nvc.Count; i++) url += string.Format("{0}{1}={2}", (i == 0 ? "?" : "&"), nvc.Keys[i], nvc[i]); Response.Redirect(url);
更新:
事实证明我们可以像这样简化代码:
var nvc = HttpUtility.ParseQueryString(Request.Url.Query); nvc.Remove("foo"); string url = Request.Url.AbsolutePath + "?" + nvc.ToString(); Response.Redirect(url);
您必须重建网址然后重定向.像这样的东西:
string url = Request.RawUrl; NameValueCollection params = Request.QueryString; for (int i=0; i无论如何,我没有测试那个或任何东西,但它应该工作(或至少让你在正确的方向)