原文出处:http://community.studyez.com/blogs/silentacorn/archive/2007/04/02/Validation-of-viewstate-MAC-failed_025F385E84769F53E056CA53E389B351B965D56C_.aspx

对于内容较多,功能较为复杂的页面,如本站的课程详细信息页面,偶尔会出现Validation of viewstate MAC failed的错误。
在异常的信息里,会说是在web farm或者集群环境下,machineKey的配置不一致导致的。而事实上,我们还并没有使用web场和集群,因此异常的提示信息显然是一种误导了。

事件日志里偶尔能发现这个错误,却一直找不到有效的解决方法。经过仔细研究分析之后,发现出现这个错误的概率还是很小的,还需要满足多个条件才行:
1.页面中使用了GridView, DetailsViews, FormView等采用内置数据绑定控件
2.就是这个页面的内容较多,在网速较慢的情况下需要较长的时间才能加载完
3.在页面还没有加载完成的情况下,点击了Postback性质的按钮。如果是get方式的url链接请求则不存在此问题

内在的深层次原因,是由于GridView等控件,为了避免暴露数据库中的字段名称,在默认的asp.net 2.0设置之下,会对GridView里用到的DataKeyNames使用加密方式存储在ViewState里,并在页尾</form>标签标签之前写入一个隐藏域<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" />用来表明ViewState是使用加密存储的。
由于这个隐藏域在页尾,因此在前面所述为页面尚未完全加载的情况下就点击Post方式的按钮,就会导致在服务器端处理反序列化viewstate时,因为找不到这个隐藏域而认为是非法的ViewState,而抛出这个异常。

解决方法就是禁止ViewState的加密,不利之处是会降低网站的安全性。
如果要禁用整个站点或者模块的ViewState加密,只需在web.config里作如下设置即可:
lt;pages enableEventValidation="false" viewStateEncryptionMode ="Never" />
当然也可以只对有出现这个问题页面的<@page作enableEventValidation="false" viewStateEncryptionMode ="Never" 设置,这样的话只会在这个页面的ViewState不作加密,不会影响到整个站点所有页面的安全性。

微软已经确认这是一个Bug,详细地讨论也可以参考asp.net官方站点 http://forums.asp.net/1/1173230/ShowThread.aspx

[转载]Validation of viewstate MAC failed异常的原因及解决方法相关推荐

  1. Validation of ViewState Mac failed exception

    Asp.net 的ViewState机制给我们带来了很多方便,但是有时候也会产生一些莫名其妙的问题.很经常遇到的就是ViewStae的验证出错,以前就有遇到这样的问题了.解决办法都是把出现错误的那个页 ...

  2. 验证视图MAC失败 Validation of ViewState MAC Failed

    验证视图MAC失败 Validation of ViewState MAC Failed 今天在调试Atlas时遇到错误: 验证视图MAC失败.如果此引用程序由网络场或群集承载,请确保<mach ...

  3. tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法...

    tomcat5下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 [标  题]:tomcat5下js ...

  4. getOutputStream() has already been called for this response异常的原因和解决方法[转]

    1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法 在tomcat6.0下j ...

  5. 服务器连接异常系统无法登录,Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法...

    Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 win10正式版LOL无法登录,提示"服务器连接异常"的问题,这该怎么 ...

  6. 计算机桌面颜色异常怎样修复,电脑显示器变色怎么办?显示器颜色异常的原因及解决方法...

    造成显示器颜色异常的原因有多种,比如显卡驱动不正常,视频线没插好,外部有强磁场干扰等,下面就教大家显示器异常的几种解决方法. 解决方法一:检查视频线是否插好 检查视频线两头是否插好,或者换一根视频线查 ...

  7. 出现 org.apache.tomcat.xxx.ClassFormatException: Invalid byte tag in constant pool: 15 异常的原因及解决方法

    1 异常描述 最近,当我从 SVN 检出项目并正常配置完 Tomcat 之后,启动项目,总是报出如下异常: 2 异常原因 通过观察上述标记出来的异常描述,我们可以知道: org.apache.tomc ...

  8. 服务器连接异常系统无法登录,科技教程:Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法...

    如今越来越多的小伙伴对于Win10系统电脑无法登录LOL提示服务器连接异常的原因及解决方法这方面的问题开始感兴趣,看似平静的每一天,在每个人身上都在发生着各种各样的故事,因为大家现在都是想要了解到此类 ...

  9. 出现 org.springframework.beans.factory.BeanCreationException 异常的原因及解决方法

    给大家推荐一个比较有趣的公众号,一个陌生人的生活日记. 1 异常描述 在从 SVN 检出项目并配置完成后,启动 Tomcat 服务器,报出如下错误: 2 异常原因 通过观察上图中被标记出来的异常信息, ...

最新文章

  1. python免费自学爬虫_这套Python爬虫学习教程,不到一天即可新手到进阶!免费领...
  2. 查找内存泄漏的一个思路
  3. VSFTP配置参数详解
  4. 如何锁定 Visual SourceSafe 数据库(转载)
  5. 工业4.0时代,工业交换机在智能电网建设中有什么作用?
  6. Emulator Error: Could not load OpenGLES emulati...
  7. 使用Laravel Eloquent ORM 时如何查询表中指定的字段
  8. 千兆交换机下面可以接多少层交换机_视频监控系统如何选择网络交换机
  9. SAP License:SAP S/4HANA就是答案
  10. 牛!这本 Python 3.6 的书火爆了 IT 圈!
  11. 修改 xweibo 的memcache代码,让xweibo支持wincache,加快xweibo速度
  12. http请求下载文件
  13. 什么软件可以测试手机硬件6,手机硬件检测的方法
  14. 每日一题(4.27 - 5.2)
  15. 为何穷人玩股票绝大多数会赔钱?
  16. MATLAB 变量和数据类型举例
  17. 凭借这份pdf,必拿下蚂蚁金服、字节跳动、小米等大厂的offer
  18. 14天学习训练营导师课程-Pygame学习笔记-Part2(第九艺术的召唤)
  19. 通达信自动交易接口怎么显示大宗流入?
  20. 抢票插件原理科普:攻击软件还是便利助手?

热门文章

  1. RMS-DC转换器AD8436
  2. WP7中对ListBox的ItemTemplate中子元素的后台操作
  3. 自动将存储过程转成C#代码的过程[转]
  4. centos 7 源码方式安装mysql5.6
  5. 诗与远方:无题(十)- 小熊夜游走廊记
  6. 诗与远方:无题(八)
  7. JSF实现文件下载功能
  8. Kafka集群安装Version2.10
  9. Dubbo新手入门实例HelloWorld(zookeeper)
  10. 基于IDEA搭建JavaWeb入门项目结构(2021版)