验证视图状态 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&amp;page=$2</SendTo>
   </RewriterRule>
   <RewriterRule>
    <LookFor>~/n(\d{1,8})c(\d{1,8})\.aspx</LookFor>
    <SendTo>~/show.aspx?id=$1&amp;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&amp;cid=$2&amp;page=$3</SendTo>
   </RewriterRule>
</Rules>
</RewriterConfig>

<appSettings>
   <add key="Charset" value="gb2312" />
    <add key="MDBpath" value="db/iwms.cs" />
   <!--sql连接字符串中不可以出现"&","<",">"如果一定要用请分别用"&amp;","&lt","&gt;"替换-->
   <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

验证视图状态MAC失败解决方案的更多相关文章

  1. 验证视图状态 MAC 失败

    起因: 最近在做一个项目需要用到生成多个Html页,采用一下方法动态生成. WebRequest request = WebRequest.Create(pageurl); WebResponse r ...

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

    转自:http://hi.baidu.com/taotaowyx/blog/item/074bb8d83907bb3233fa1ce6.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群 ...

  3. 验证视图状态 MAC 失败,解决方法

    错误信息 今天调试一个带cookie表单提交的页面时,浏览器中报错提示:验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 v ...

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

    原文转自:http://www.cnblogs.com/Setme/archive/2012/06/05/2537084.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 ...

  5. form submit时将__VIEWSTATE和__VIEWSTATEGENERATOR一起post到另外的页面,出现验证视图状态 MAC 失败。

    错误信息: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate. 原因分析: F ...

  6. 验证视图状态 MAC 失败的解决办法

    昨天用户反应系统中有问题,问题就在于翻页的时候,系统会报以下错误.但是我们的系统已经上线1年多了,从来没出现过错误,怎么会出现错误呢?于是开始检测,查找原因. 1. 出错提示 “/”应用程序中的服务器 ...

  7. ASP.Net 验证视图状态 MAC 失败

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

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

    异常描述: Global.asax捕获到异常:System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 < ...

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

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

随机推荐

  1. 获得当前屏幕的CGRect

    CGRect mainScreen = [[UIScreen mainScreen] bounds];

  2. Hdu 4010-Query on The Trees LCT,动态树

    Query on The Trees Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Othe ...

  3. poj 1080 dp如同LCS问题

    题目链接:http://poj.org/problem?id=1080 #include<cstdio> #include<cstring> #include<algor ...

  4. asterisk错误排查

    1.查看某个模块是否被包含在编译选项里了: See menuselect.makeoptsIf you see chan_sip in the MENUSELECT_CHANNELS option, ...

  5. Google网页搜索

    本博文的主要内容有 .Google网页搜索的介绍 .Google网页搜索的使用偏好设置 .Google网页搜索的普通搜索 .Google网页搜索的高级搜索 .Google高级搜索之一:布尔逻辑搜索   ...

  6. hdu1026 Ignatius and the Princess I (优先队列 BFS)

    Problem Description The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has ...

  7. w10 系统升级

    怎么把电脑升级到w10系统? 下载一个软件,Windows10Upgrade9252.exe, 5M左右,把windows更新开启后,运行即可! 升级后,请把windows.old 文件夹删除,这个文 ...

  8. DevExpress LookUpEdit 下拉框基本操作

    <span style="font-size:14px;"> ArrayList list = new ArrayList(); //遍历皮肤,放到列表中 foreac ...

  9. 【Android - MD】之NavigationView的使用

    NavigationView是Android 5.0新特性--Material Design中的一个布局控件,可以结合DrawerLayout使用,让侧滑菜单变得更加美观(可以添加头部布局). Nav ...

  10. 下载的chm手册打不开的解决方法?

    用ie或者chrome等浏览器下载文件的时候,都会给文件加上一个默认的保护,右键这个文件,打开属性对话框,然后在第一个的选项卡的安全的部分,有个解除这个保护的按钮点下然后确定保存,再打开chm文件就不 ...