Validation of viewstate MAC failed异常的原因及解决方法
来源:互联网 发布:计价软件有哪些 编辑:程序博客网 时间:2024/06/05 17:48
对于内容较多,功能较为复杂的页面,如本站的课程详细信息页面,偶尔会出现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异常的原因及解决方法
- Validation of ViewState Mac failed 的解决方法
- Validation of viewstate MAC failed. 解决方法
- Validation of viewstate MAC failed. 解决方法
- Asp.net Submit提交时Validation of viewstate MAC failed错误的解决方法
- 验证视图MAC失败 Validation of ViewState MAC Failed
- 验证视图MAC失败 Validation of ViewState MAC Failed
- 验证视图状态 MAC 失败 ( Validation of viewstate MAC failed )
- 验证视图MAC失败 Validation of ViewState MAC Failed
- ASP.NET中Validation of viewstate MAC failed问题的解决
- ASP.NET中Validation of viewstate MAC failed问题的解决
- Asp.Net2.0验证视图状态 MAC 失败 ( Validation of viewstate MAC failed )
- Asp.Net2.0验证视图状态 MAC 失败 ( Validation of viewstate MAC failed )-问题已解决
- Asp.Net2.0验证视图状态 MAC 失败 ( Validation of viewstate MAC failed )
- Asp.Net验证视图状态 MAC 失败 ( Validation of viewstate MAC failed )
- 网站访问出现Validation of viewstate MAC failed错误是怎么一回事?
- Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure t
- hibernate的一些异常原因及解决方法
- 关于C++内存问题(转)
- 比尔盖茨死后,你觉得哪句话可以刻到他的墓碑上?
- 由VS工具栏的定制想到的
- WIN98特殊窗口的动态拖动收藏
- C++网络编程
- Validation of viewstate MAC failed异常的原因及解决方法
- 美美征婚 阿米托佛(*^__^*)
- CString/string/char *比较详解1
- 一个右键菜单的JS类
- 如何设置REUSE_ALV_GRID_DISPLAY'的单个单元格的是否可以输入[转]
- 15个步骤收获一生的学习习惯
- CString/string/char *比较详解(2)
- pd生成的oracle数据代码双引号问题
- CString/string/char *比较详解(3)