购买流程 付款方式 常见问题 在线提问  续租服务  购物车
首页 域名注册 虚拟主机 成品网站 企业邮局 服务器租用 VPS主机 云主机 智能建站 代理专区 客户中心
用户登陆
           首页公告
           常见问题
           有问必答
           跟踪提问
           购买流程
           付款事宜
           汇款确认
           相关文档
           联系我们



验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置

 



验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置
    

在.net的网站程序中有时要报这样的错误:验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置


那么我们来看看具体的原因:

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

原因分析:
这个问题以前基本没有遇到过,这次莫名其妙的出现。查了点资料其实原理挺简单:就是通过XMLHttpRequest把文本输入框内输入的内容传送给后台处理页面,后台处理完之后通过回调函数取得值,然后再把值输出在信息提示层上。
如果用GridView,并且指定了DataKeyNames属性,则出于安全的理由(因为DataKeyNames指定的字段代表数据的主键,且该主键值需要保存在视图状态中发送到客户端,用户如果篡改主键值,会导致安全问题),GridView会要求加密视图状态。为此会自动在页面表单</forms>之前添加一个<input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="" /> 。 
然而,Atlas的UpdatePanel要求放置在<form></form>内部,也就是</form>之前。这就意味着添加的隐藏input控件没有被放置在UpdatePanel内,而是放置在UpdatePanel和</form>之间。
当UpdatePanel更新时,UpdatePanel内部的控件被提交到服务器进行处理(Patrial Rendering),而整个页面并没有被提交。也就是说隐藏的input控件没有随着一起提交。因此服务器并不知道提交的ViewState被加密了,从而导致MAC验证错误。

具体解决方法:
1、 单页面解决方法:
直接在问题页面开头加入一个属性。
<%@ page language="C#" EnableViewStateMac= "false"%>
2、 当多页面出现问题时其解决方法:
在web.config文件中的添加
<configuration>
<appSettings>
添加的设置在此处
</system.web>
</configuration>

添加内容为:
<machineKey validationKey="C3DD5E21134BDCAF7D951A2ED8E45F7E7395A8CEBAA6A43A8D8528A85B9AB00D" decryptionKey="ADCBCFC864936D0248917F2CF276E6F392F5A202F1DB53D9" validation="MD5" />

或者

<machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>
在配置文件中,在“添加的设置在此处”添加上上面的一条就OK!


返回首页 |关于我们 | 联系我们 | 付款方式 | 广告联盟 | 有问必答
版权所有 西部数码代理,西数代理,vps_空间优惠,网站性能优化·严禁复制
在线客服: 点击发送消息给对方3528938
服务热线:18382390188 传真:028-86264041
信息反馈:业务咨询 技术问题 问题投诉 《中华人民共和国增值电信业务经营许可证》川B2-20030065号
友情链接:美美哒网