【问题标题】:ASPX: Redirect, remove QueryString but don't create history in browserASPX:重定向、删除 QueryString 但不在浏览器中创建历史记录
【发布时间】:2011-04-01 02:46:36
【问题描述】:

我正在寻找一种方法来摆脱页面的查询字符串并重定向到自身,但以某种方式保留查询字符串数据。 示例:http://www.test.de/somepage.aspx?id=abc 应重定向到 http://www.test.de/somepage.aspx。不过,在重定向之后,我希望能够获取最初传递的参数。而且我不想在浏览器的历史记录中出现http://www.test.de/somepage.aspx?id=abc

到目前为止我尝试了什么:

  • Response.Redirect():在不创建浏览器历史记录的情况下进行正确的重定向,但我无法保留参数。

  • Server.Transfer:保留参数但浏览器的URL保持不变。

  • 即时创建客户端表单并在onload 中提交:有效,查询字符串已消失,可通过 Request.Form 访问参数,但会在浏览器中创建历史记录条目。

我目前唯一能想到的是将参数存储在会话中,然后重定向,然后从那里获取它们。但也许还有另一种解决方案?

【问题讨论】:

  • 听起来您已经有了最佳答案 - 将 qs 存储在会话中并执行 Response.Redirect(url);。您是否有不想使用会话的原因?
  • 主要原因是处理它的复杂性。您可能会打开两个显示同一页面的浏览器选项卡,并且它们共享一个会话。如果处理时间不同,则很有可能会覆盖另一个。

标签: c# asp.net redirect browser-history


【解决方案1】:

正如皮特所说,您可以将查询字符串参数保存在 Session 中,然后调用 Response.Redirect 以重定向到第二页

Session["id"] = Request["id"];
Session["param2"] = Request["param2"];
Session["param3"] = Request["param3"];
....
Response.Redirect(sameurl);

在页面的第二次加载中,检查查询字符串值是否消失。如果是,则不要从查询字符串中读取值,而是从会话中读取值。

id = Session["id"];
param2 = Session["param2"];
param3 = Session["param3"];
...

【讨论】:

    【解决方案2】:

    不了解为什么要这样做,最好的办法是将参数存储在会话状态中。会话状态应尽量少用,因为它会导致应用程序不可靠。例如。如果您的用户存储了一个书签,或者在会话超时后点击了刷新,会发生什么?由于这些原因,我建议不要使用这种方法。

    您可以考虑使用 URL 重写来使您需要的参数看起来更友好,例如:http://www.test.de/somepage/abc

    【讨论】:

    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2023-03-13
    • 2012-04-20
    • 2017-11-02
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多