ASP.NET Post获取重定向浏览器历史记录问题

时间:2012-05-21 21:31:07

标签: asp.net redirect webforms response.redirect

我正在使用Post Get Redirect方法使用asp.net webforms提交表单。这是一个非常简单的设置:

Step 1) Post form on Page1.aspx
Step 2) Process form and redirect using Response.Redirect to Page2.aspx
Step 3) Page2.aspx redirects using Response.Redirect to Page3.aspx

如果您使用Page3.aspx并点击后退按钮,我认为它应该会将您带回Page2.aspx并将您重定向回Page 3.aspx。这将减少您返回Page1.aspx并再次提交数据的机会。

相反,当我按下后退按钮时,我会直接回到Page1.aspx。我也尝试使用303重定向,但这也不起作用。

这可能会发生什么?

1 个答案:

答案 0 :(得分:0)

您所看到的行为是正确的。

各种浏览器,为了更好地支持某些网站(如谷歌)的运营方式,不会在后面的历史记录中保留重定向的网页。

考虑一下:

  1. 您搜索google.com
  2. 您点击了链接
  3. 此链接实际上会将您转至google.coms服务器,然后立即转发到实际页面。

  4. 您认为这不是正确的链接,请点击后退按钮。

  5. 此时,大多数浏览器会将您带回到第2步中确定的页面。这是数百万网民通常所希望和预期的行为。

    要回到第3步,只转发到第4步,好吧,会让一些人失望。正如IE的某些版本最近所做的那样,直到行为被修补。

    重点是,您所看到的行为正是其余网络的运作方式。如果你真的想要,你应该研究一些其他机制来改变它。

    更新


    @NinjaBomb:不知怎的,我错过了你的后续问题,所以下面的内容可能没用多少。

    答案是,不是在c#代码中进行重定向,而是在页面2中嵌入一些javascript,在页面加载完成时进行重定向。浏览器然后“存储”对第2页的引用。当他们从3点击后退按钮时,它将返回2然后重定向到3.

    当然,用户只需按两次后退按钮...中断2的重定向并让它们转到1.我能想到的另一种方法是在加载时测试第1页,测试某些会话或cookie看看他们是否已被发送的价值。如果是这样,那么第1页应该重定向而不是显示自己。