页面重新加载是否会导致帖子?

时间:2012-12-14 17:57:55

标签: c# html forms post webmatrix

快速提问,我已经尝试过自己解决这个问题,但在尝试弄清楚页面重新加载和执行/不做它应该做的事情的原因或方式时,使用会话变量会让人感到困惑。

在任何(非脚本化)环境下,页面是否重新加载(使用JavaScript,f5,ctrl + f5,浏览器重新加载按钮等)会导致表单重新发布?

(这适用于在C#代码中使用IfPost分支,如下面的示例代码所示):

if(IsPost)
{
    //stuff that only executes if the previous request was a post.
}

我只需要知道在这里期待什么,这样我就可以正确诊断会话状态问题。

感谢您的帮助!

(另外,如果我过分简化这个问题,请对不起。我意识到它可能比简单的答案更复杂)。

** * ** * 更新 * ** * ** * ** * 此外,我在StackOverflow上查找了这个问题的副本,但我没有看到任何内容,所以如果这是一个重复的问题,我道歉。

这里的两个答案都是很好的答案。我接受了答案,也提出了我的问题的解决方案,虽然PRG不是“唯一”的方法,但似乎它可能是最好的。它似乎也是处理客户端用户友好性的一种越来越多的方式,而imho似乎是一个很好的习惯。

感谢您向我展示!

3 个答案:

答案 0 :(得分:5)

是。如果使用POST数据加载页面,则会发生这种情况。为防止这种情况,您需要实施POST/REDIRECT/GET pattern

  

Post / Redirect / Get(PRG)是一种Web开发设计模式,可以防止一些重复的表单提交,为用户代理(用户)创建更直观的界面。 PRG以可预测的方式支持书签和刷新按钮,不会创建重复的表单提交。

答案 1 :(得分:2)

是。如果有人手动刷新浏览器,它会询问他们是否要再次发送表单数据。这将导致代码被执行。

答案 2 :(得分:0)

处理此问题的一种方法是使用令牌。

  1. 随机发送随机字符串
  2. 将此随机字符串存储在某处
  3. 检查发布数据时,请确保存储的字符串与发布请求中的字符串相同。
  4. 如果为true,请处理请求。
  5. 生成新令牌
  6. 如果有人要刷新并重新发送帖子数据,那么您在帖子请求中的令牌将与您在第5步生成新令牌时单独存储的令牌不同