验证视图状态MAC失败

时间:2009-12-10 05:59:38

标签: c# asp.net

运行ASP.NET webforms运行应用程序正常。当应用程序空闲4到5分钟时,它会出现此错误:

  

viewstate MAC验证失败。如果   此应用程序由Web托管   农场或集群,确保    配置指定   相同的validationKey和验证   算法。无法使用AutoGenerate   在群集中。

如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

这个免费的在线工具:http://aspnetresources.com/tools/machineKey在web.config文件中的system.web元素下生成一个machineKey元素。 以下是它生成的示例:

<machineKey validationKey="1619AB2FDEE6B943AD5D31DD68B7EBDAB32682A5891481D9403A6A55C4F91A340131CB4F4AD26A686DF5911A6C05CAC89307663656B62BE304EA66605156E9B5" decryptionKey="C9D165260E6A697B2993D45E05BD64386445DE01031B790A60F229F6A2656ECF" validation="SHA1" decryption="AES" />

在web.config中看到这个后,错误本身突然变得有意义。 你得到的错误是

  

“确保配置指定相同   validationKey和验证算法“。

当你看这个machineKey元素时,突然你可以看到它在说什么。

在此处修改system.web元素下的pages元素可能不是必需的。这可以避免与这些属性相关的安全问题。


通过在web.config中“硬编码”此值,asp.net用于序列化和反序列化视图状态的密钥保持不变,无论服务器场中的哪个服务器接收它。您的加密变得“可移植”,因此您的视图状态变为“可移植”。

我只是猜测也许非常相同的服务器(不在服务器场中)有这个问题,如果由于任何原因它“忘记”它所拥有的密钥,由于任何重置消除它的水平。这也许就是为什么你在闲置期后看到这个错误并尝试使用“陈旧”页面的原因。

答案 1 :(得分:1)

答案 2 :(得分:0)

使用以下元素修改您的web.config:

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

需要更多信息,请参阅ASP.NET Forums topic

答案 3 :(得分:0)

这不是你的问题,但可能有助于其他人。确保您回发到同一页面。检查表单标记上的操作,然后使用Firefox Live HTTP标头查看浏览器请求的URL。

我遇到了这个,因为我回复了一个名称相同但路径不同的页面。