如何从查询字符串中删除项目以进行重定向?

Dan*_*mal 8 c# asp.net webforms

在我的基页中,我需要从查询字符串中删除一个项目并重定向.我不能用

Request.QueryString.Remove("foo")
Run Code Online (Sandbox Code Playgroud)

因为该集合是只读的.有没有办法获取查询字符串(除了那一项)而不迭代整个集合并重新构建它?

Zia*_*iad 10

您可以通过处理原始查询字符串来避免触及原始查询字符串.然后,您可以将页面重定向到包含修改后的查询字符串的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);
Run Code Online (Sandbox Code Playgroud)

更新:

事实证明我们可以像这样简化代码:

    var nvc = HttpUtility.ParseQueryString(Request.Url.Query);

    nvc.Remove("foo");

    string url = Request.Url.AbsolutePath + "?" + nvc.ToString();

    Response.Redirect(url);
Run Code Online (Sandbox Code Playgroud)


Rya*_*ley 8

您必须重建网址然后重定向.像这样的东西:

string url = Request.RawUrl;

NameValueCollection 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);
Run Code Online (Sandbox Code Playgroud)

无论如何,我没有测试那个或任何东西,但它应该工作(或至少让你在正确的方向)