【问题标题】:"Validation of ViewState MAC failed" - What does this error mean?“ViewState MAC 验证失败” - 此错误是什么意思?
【发布时间】:2009-07-24 04:38:17
【问题描述】:

视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保 <machineKey> 配置指定相同的 validationKey 和验证算法。 AutoGenerate 不能在集群中使用。

顺便说一句,我正在使用本地主机。

【问题讨论】:

  • 你真的需要解释更多。提供代码,你想要做什么,等等。
  • 这有很多原因。 stackoverflow.com/…
  • 每次我运行我的网站时,有时都会出现这个错误;所以我需要重新构建网站,它会正常运行。

标签: asp.net


【解决方案1】:

这可能与应用回收有关。 Viewstate 由应用程序首次启动时生成的密钥签名。如果您的应用程序池在请求之间已回收,则视图状态签名密钥将更改,之前的视图状态将无效,您将看到异常。

为了排除这种情况,您可以在 web.config 中 set a specific machine key

另外需要注意的是,如果您的页面大量使用数据绑定,则您的视图状态可能非常大,并且页面可能会在完成之前呈现给浏览器,并且如果您随后做了一些导致发布的事情在页面完全下载之前返回,您可能会看到错误。这已在 .NET 3.5 SP1 中修复。您还可以通过将表单呈现为禁用然后在客户端启用它或通过更改生成视图状态的位置来解决此问题。 ASP.NET调试博客有the instructions.

如果它仍然发生,您不是在尝试使用 javascript 更改视图状态表单字段吗?

【讨论】:

  • “设置特定机器密钥”链接已失效。
【解决方案2】:

默认情况下,ASP.NET 将尝试验证视图状态。如果验证失败,它将抛出此异常。它可能无法验证的原因包括重新编译站点,然后在浏览器中刷新表单,或某种服务器场/集群(但如果您使用的是 localhost,我会倾向于前者)。

如果它真的妨碍了你,你可以关闭它,但是任何人都可以嘲笑你的视图状态。只要您一开始就不信任用户输入(而且您不应该),这没什么大不了的。在您的 web.config 中:

<pages enableViewStateMac="false" />

【讨论】:

  • 哇。首先,像这样的 Viewstate 错误与事件验证没有任何关系(这不会解决它),其次关闭事件验证是一个非常糟糕的主意。它生成的输入不受您的控制,无法检查。
  • 是的,对不起,我复制了错误的属性——我已经编辑了我的答案。
【解决方案3】:

查看this long thread on the official ASP .NET forum - 它几乎涵盖了发生这种情况的所有原因以及一些解决方案。

请注意,以下通常是临时修复,但注意这样做的安全隐患。

<pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode ="Never" />

【讨论】:

  • 我想使用临时修复,但害怕影响安全性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-27
  • 2010-11-24
  • 1970-01-01
相关资源
最近更新 更多