"验证视图MAC失败"错误的个人分析以及解决办法

今天在免费空间出现如下错误:

"验证视图MAC失败。如果此引用程序由网络场或群集承载,请确保<machineKey>配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate"

估计是因为是因为服务器用了群集或者多个虚拟机或者多个网站的machineKey配置引起。搜索了一下网络。发现大部分就是要求将enableEventValidation="false",enableViewStateMac="false",viewStateEncryptionMode="Never"甚至要求在Web.config配置machineKey,但是按照错误提示。。我猜如果得一个site,配置machineKey可能生效,在我这个情况,应该没有作用。

msdn上说enableEventValidation是设置"获取或设置启用事件验证的值。","此事件验证机制可消除未经授权的回发请求和回调带来的风险。它指示 ASP.NET 仅对会在回发请求或回调期间在控件上引发的特定事件进行验证。通过此模型,控件可在呈现期间注册其事件,然后在回发或回调期间验证这些事件。默认情况下,现在 ASP.NET 中的所有事件驱动控件均使用此功能:"也就是检测回发请求。

而enableViewStateMac是"获取或设置一个值,该值指定当页从客户端回发时,ASP.NET 是否应在页的视图状态上运行消息验证代码 (MAC)。 ","视图状态 MAC 是页的视图状态在其发送到浏览器时所保存到的隐藏变量的加密版本。如果为 true,则检查加密的视图状态以验证该视图状态在客户端上是否尚未被篡改。如果主要考虑性能,则不要将 EnableViewStateMac 设置为 true。"这个靠谱了。。估计就是这个原因。但是msdn上说默认值是false。设置成false应该没有用啊。。当然也可能是服务器管理员将它设置成true了。

viewStateEncryptionMode是"获取或设置 ASP.NET 在保留 ViewState 值时所使用的加密模式","可能的 ViewStateEncryptionMode 枚举值有 AlwaysAutoNever。默认值为 Auto。如果 ViewStateEncryptionMode 属性设置为 Auto,则 ViewState 会在控件请求它时加密。"这样可能也有些影响。因为它默认是auto,回发时候会启用加密。但是,这样加密和不加密不和上边的enableViewStateMac重复了么?所以我向引起原因的只有一个设置。

开始动手试验,先将web.config设置一下:<pages enableViewStateMac="false" />,然后测试。。。哈哈!居然成了!!

无语了。这么快就解决了。其他就不测试了。。暂时解决了就算了。以后理解到什么东西再补充吧。

洗衣机坏了,估计是因为皮带磨损厉害。赶着出去买个新回来,等着洗衣服呢!

原文地址:https://www.cnblogs.com/KenBlove/p/1313915.html