ASPX:重定向,删除QueryString但不在浏览器中创建历史记录

时间:2010-08-19 12:46:04

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

我正在寻找一种方法来摆脱页面的查询字符串并重定向到自身,但以某种方式保存查询字符串数据。 示例: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:保留参数,但浏览器的网址保持不变。

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

    < / LI>

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

2 个答案:

答案 0 :(得分:2)

正如Pete所说,您可以在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"];
...

答案 1 :(得分:0)

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

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