运行ASP.NET webforms运行应用程序正常。当应用程序空闲4到5分钟时,它会出现此错误:
viewstate MAC验证失败。如果 此应用程序由Web托管 农场或集群,确保 配置指定 相同的validationKey和验证 算法。无法使用AutoGenerate 在群集中。
如何解决这个问题?
答案 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。
我遇到了这个,因为我回复了一个名称相同但路径不同的页面。