当您的网站在提交信息到服务器数据库的时候,发生错误,出现如下提示:
System.Web.HttpException: 验证视图状态MAC失败。如果此应用程序由网络场或群集承载,请确保配置指定了相同的validationKey和验证算法……
出现这样的问题,请参阅下文,或许对您有所帮助。
解决办法一
直接修改web.config
<pages validateRequest="true" styleSheetTheme="UserDefaultTheme">
改为
<pages validateRequest="false" styleSheetTheme="UserDefaultTheme">
不行就改成这样
<pages validateRequest="false" styleSheetTheme="UserDefaultTheme" enableEventValidation="false" viewStateEncryptionMode ="Never" >
解决办法二
找到网站运行根目录下的web.config文件,如下图加亮行所示加上相应的项。设置时,请自行修改KEY值,这关系到服务器的加密安全。图片看不清晰请点击图片查看。
代码:<machineKey validation="SHA1" validationKey="78EA3850338FBADCE59D8DDF58C9E4518E7510149C46142D7AAD7F1AD49D95D4" decryptionKey="5FC88DFC24AE12BC" />
原因:因为.NET在对客户端数据与服务器间传送过程中,需要对数据进行加密与解密,而加密与解密算法可以在web.config里进行配置,在web.config中,validationKey和decryptionKey的默认值是AutoGenerate,由系统随机生成密钥,如果在本地或者使用的是独立主机通常不会有什么问题,但是使用虚拟主机,一台服务器上有多个虚拟主机存在时就会出现以上问题,MSDN中也特别指出不能在群集中使用 AutoGenerate应该指定固定的密钥值,这就需要在web.config中添加关于machineKey的配置项,并手动设置其中的密钥值,这里请注意,不同加密算法对于密钥的最大字符长度是不同的,在这里能够使用的有AES,DES,3DES,SHA1,MD5,我只知道DES的密钥字符长度为16,3DES长度为48,手动设置时密钥长度必须等于其最大长度,否则会出错!至于密钥的16进制值可以随便输入。
解决办法三
出现这样的问题,极有可能是,您的登陆状态Session已经过期,也就是说登陆状态生效,但是,网站的转向登陆页面的代码未能正确转向,所以就出这样的问题。
解决的办法就是,不用进行任何修改,只需要重新登陆就可以了。