文章类型: .NET
关键词: 验证视图状态,MAC,失败,如果此应用程序由网络场或群集承载,validationKey,和验证算法,不能在群集中使用,AutoGenerate
内容摘要: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的validationKey 和验证算法。不能在群集中使用 AutoGenerate。说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息

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

2015/7/14 15:50:05    来源:apple    阅读:

“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

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

源错误: 

只有在调试模式下进行编译时,生成此未经处理的异常的源代码才会显示出来。若要启用此功能,请执行以下步骤之一,然后请求 URL: 

1. 在产生错误的文件的顶部添加一条“Debug=true”指令。例如: 

  <%@ Page Language="C#" Debug="true" %>

或:

2. 将以下的节添加到应用程序的配置文件中:

<configuration>
   <system.web>
   <compilation debug="true"/>
   </system.web>
</configuration>

请注意,第二个步骤将使给定应用程序中的所有文件在调试模式下进行编译;第一个步骤仅使该特定文件在调试模式下进行编译。

重要事项: 以调试模式运行应用程序一定会产生内存/性能系统开销。在部署到生产方案之前,应确保应用程序调试已禁用。  

堆栈跟踪: 


[ViewStateException: 无效的视图状态。

 

分析后找到了问题的根源

Atlas的UpdatePanel要求放置在<form></form>内部,也就是</form>之前。这就意味着添加的隐藏input控件没有被放置在UpdatePanel内,而是放置在UpdatePanel和</form>之间。

当UpdatePanel更新时,UpdatePanel内部的控件被提交到服务器进行处理(Patrial Rendering),而整个页面并没有被提交。也就是说隐藏的input控件没有随着一起提交。因此服务器并不知道提交的ViewState被加密了,从而导致MAC验证错误。

解决方法有二,仅供参考:

1. 可以在当前页面的<page ...>里加两个属性,当然我推荐最好用这种解决方案,不会影响其他页面的配置:
enableEventValidation="false" viewStateEncryptionMode ="Never"

2. 当然还可以在web.config里加入,这种方法会对整个站点的页面产生影响,我不推荐这种做法:(<system.web>之间)
<pages enableEventValidation="false" viewStateEncryptionMode ="Never" />

其余方法   

在web.config中的pages节点上添加enableviewstatemac=false 

附带:

          一般而言是因为你的某些操作修改了视图状态,我猜测你可能使用了ajax并在客户端用javascript动态添加了某些项

1. 在出错页面的 <%@ page %>中加enableviewstatemac="false"无效。 
2. 在web.config的 <system.web>节中加 
<machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>

我的问题是加入:<machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77"/>解决。

 

最重要的是检查自己的页面,很可能是你的页面中的问题,多注意下肯定能发现问题 而这个问题并没有报出你想要的错误 !所以不一定所有的解决方案都适合你!!!

 

 

↑ 上一篇文章:查找文章的相关文章的思路分析及实现 关键词:.net,C#,SQL,server,Data,Tabl.. 发布日期:2015/7/14 15:47:35
↓ 下一篇文章:日期DateTime类型在.net中模糊查询SQL数据库的思路分析 关键词:日期类型,DateTime,C#,.net,模糊查询,l.. 发布日期:2015/7/14 15:51:48
相关文章:
LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 关键词:LNK1123:,转换到,COFF,期间失败:,文件无效或损坏 发布日期:2016-08-04 17:10
sqlserver 附加数据库失败,操作系统错误 5:"5(拒绝访问。)"的解决办法 关键词:sql,server,附加数据库失败,操作系统错误,5,拒绝访问,解决办法 发布日期:2017-09-28 19:59
在应用程序级别以外使用注册为 allowDefinition=MachineToApplication的节是错误的解决办法 关键词:在应用程序级别以外使用注册为,allowDefinition=MachineToApplicat.. 发布日期:2017-09-28 20:30
相关目录:.NET
我要评论
正在加载评论信息......