验证视图状态MAC失败解决方案
验证视图状态 mac 失败。如果此应用程序由网络场或群集承载 请确保 machinekey 配置指定了相同的 validationkey 和验证算法。不能在群集中使用 autogenerate。
总是莫名其妙的遇到这种问题,下面总结了一些常用的解决方案,基本可以解决大家在asp.net编程中遇到的问题。但验证视图状态 mac 失败问题,微软是要负一部分责任的。本来好好的一个程序,运行一段时间突然就出现这种问题了,大家是不是有同感。
方法一:
验证视图状态 MAC 失败。
可以在当前页面的<page ...>里加两个属性:
enableEventValidation="false" viewStateEncryptionMode ="Never"
当然还可以在web.config里加入:
<pages enableEventValidation="false" viewStateEncryptionMode ="Never" />
方法二:
出错提示:
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
解决说明:
asp.net的runat='server' 会对ViewStat进行MAC的加密,使得提交数据时只能对同一页面进行。在接收页加上
@ page EnableViewStateMac="false"
就可以接收另一页上post回来的数据。
方法三:
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
如果你使用了web园,需在每台服务器的web.config中设置相同的machineKey
WEB.CONFIG示例:
<?xml version="1.0" encoding="gb2312"?>
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/c(\d{1,8})\.aspx</LookFor>
<SendTo>~/list.aspx?cid=$1</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/c(\d{1,8})p(\d{1,6})\.aspx</LookFor>
<SendTo>~/list.aspx?cid=$1&page=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/n(\d{1,8})c(\d{1,8})\.aspx</LookFor>
<SendTo>~/show.aspx?id=$1&cid=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFor>~/n(\d{1,8})c(\d{1,8})p(\d{1,8})\.aspx</LookFor>
<SendTo>~/show.aspx?id=$1&cid=$2&page=$3</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<appSettings>
<add key="Charset" value="gb2312" />
<add key="MDBpath" value="db/iwms.cs" />
<!--sql连接字符串中不可以出现"&","<",">"如果一定要用请分别用"&","<",">"替换-->
<add key="SQLConnString" value="server=(local);UID=sa;PWD=;database=dvnews" />
</appSettings>
<system.web>
<compilation defaultLanguage="C#" debug="false"/>
<!--如果为.net SDK 1.0及以前版本,请删除validateRequest="false" -->
<pages validateRequest="false" enableSessionState="true" enableViewState="true"/>
<customErrors mode="Off" />
<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />
<httpRuntime maxRequestLength="2048" />
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
</httpHandlers>
</system.web>
</configuration>
方法四:
web.config中<machineKey>中的validationKey。请仔细看错误提示。此节需要自己添加。
http://msdn.microsoft.com/zh-cn/library/w8h3skw9(VS.80).aspx
方法五:
“/”应用程序中的服务器错误。 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
源错误:
版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版
如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。
machineKey生成的算法:
validationKey = CreateKey(20);
decryptionKey = CreateKey(24);
protected string CreateKey(int len)
{
byte[] bytes = new byte[len];
new RNGCryptoServiceProvider().GetBytes(bytes);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < bytes.Length; i++)
{
sb.Append(string.Format("{0:X2}",bytes[i]));
}
return sb.ToString();
}
附参考的matchineKey配置:
<?xml version="1.0"?>
<configuration>
<system.web>
<machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>
</system.web>
</configuration>
相信通过以上五个步骤,您应该可以解决"验证视图状态 mac 失败。如果此应用程序由网络场或群集承载 请确保 machinekey 配置指定了相同的 validationkey 和验证算法。不能在群集中使用 autogenerate。"这个郁闷的问题了!
来源:http://hi.baidu.com/motiansen/blog/item/2c10d5031bc9b67b3912bbb5.html
最新文章
- sizzle分析记录:getAttribute和getAttributeNode
- ASP.NET corrupt assembly “Could not load file or assembly App_Web_*
- Tomcat version 7.0 only support J2EE 1.2。。。。。。。
- 使用mybatis-generator自动生成model、dao、mapping文件
- POJ 2891 Strange Way to Express Integers(拓展欧几里得)
- python购物&;常用字符处理方法
- Android源码及SDK国内镜像下载
- ODBC操作excel
- SQL in优化将In转化为联合查询
- jsp设置footer底部内容
- github的SSH配置如下
- 1596: [Usaco2008 Jan]电话网络
- oldboy s21day07(深浅拷贝及文件操作)
- ip通信第七周
- 使用telnet进行Dubbo接口测试
- python随笔--复习专用
- 排序算法(2)--Insert Sorting--插入排序[2]--binary insertion sort--折半(二分)插入排序
- oracle之 手动创建 emp 表 与 dept 表
- 已知UIScrollView放大后的Frame和放大之前的Frame计算放大的瞄点坐标
- C语言 &#183; 复数归一化
热门文章
- HTML5 Canvas JavaScript库 Fabric.js 使用经验
- JavaScript 兼容 Array.prototype.slice.call
- 11个让你吃惊的Linux终端命令
- java 实现 DES加密 解密算法
- [AngularJS + Webpack] Uglifying your JavaScript
- 在LINUX中跟踪函数调用----http://stackoverflow.com/
- Java语言基础(九)
- GNU GRUB version 0.97 (630K lower /2053824K upper memory)
- nodejs 按行读取 readline
- 第二篇:python基础之文件读写