验证视图状态 MAC 失败

起因:

最近在做一个项目需要用到生成多个Html页,采用一下方法动态生成。

   WebRequest request = WebRequest.Create(pageurl);
   WebResponse response = request.GetResponse();
   Stream resstream = response.GetResponseStream();
   StreamReader sr = new StreamReader(resstream, System.Text.Encoding.UTF8);
   string contenthtml = sr.ReadToEnd();
   resstream.Close();
   sr.Close(); //写入文件

生成的页面在完成页面动作时,需要进行页面跳转。当跳转至新页面时出现一下错误:

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

尝试过很多解决方案。

分析:

当runat="server"的表单通过修改action提交数据到其它页面时,会引发这个问题。

主要的原因是提交了名为__VIEWSTATE的数据,ASP.NET的验证视图状态的时候失败。

有提交前禁用__VIEWSTATE即可:

解决方法:

1、去掉 runat="server"

2、添加enableEventValidation="false" enableViewStateMac="false"

或在webconfig中添加<pages enableEventValidation="false" enableViewStateMac="false" />

3、在webconfig中添加:<machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryption="3DES" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" />

参考:

MSN 上关于machinekey:

http://msdn.microsoft.com/zh-cn/library/w8h3skw9(v=VS.80).aspx

http://msdn.microsoft.com/zh-cn/library/dtkwfdky(v=VS.80).aspx

4、不使用跨页面提交,提交到本页后在page.load中redirect.

5、使用 <asp:Button runat="server" PostBackUrl="~/Register/DoRegister.aspx" Text="提交" />

最终解决:

试了很多的方法,最终通过最后一个方法设置PostBackUrl跳转才得以解决。

时间: 2024-10-13 03:00:28

验证视图状态 MAC 失败的相关文章

验证视图状态MAC失败的解决该方法

出错提示: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate. web.config 中matchineKey配置: <system.web>    <machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36

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

错误信息: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate. 原因分析: F_App_Cux_Pro.aspx页面原代码: this.form1.action = "F_Add_App_Cux_Pro.aspx?CuxId=" +$("#CuxId").val() + ""; this.form1.submit(); 也就是

验证视图状态 MAC 失败。 ASP.NET machineKey的作用和使用方法

ASP.NET machineKey的作用 如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate.”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状

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

昨天用户反应系统中有问题,问题就在于翻页的时候,系统会报以下错误.但是我们的系统已经上线1年多了,从来没出现过错误,怎么会出现错误呢?于是开始检测,查找原因. 1. 出错提示 “/”应用程序中的服务器错误.验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate.说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及

验证DNS解析失败:解决办法之一

今天晚上练习简单的DNS解析验证: 环境是在一台虚拟机上搭建,另一台虚拟机验证,步骤如下: 虚拟机A: 1.安装软件包 bind  和bind-chroot[[email protected] ~]# yum -y install bind-chroot bind 2.修改主配置文件  /etc/named.conf ,[[email protected] ~]# vim /etc/named.conf options {        listen-on port 53 { any; }; 

form表单提交

1.form表单提交.html页面失败 <%--客户端form--%> <form id="form2" action="LoginOne.html" method="post"> <div> 用户名: <input type="text" name="username" value="admin" /> <input type=&q

ASP.NET machineKey的作用和使用方法

ASP.NET machineKey的作用 如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate.”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状

MachineKey

我是在收到用户发来的这个错误信息的截图后才认识到什么是MachineKey的. 有关MachineKey的概念.MachineKey的生成以及web.config文件里的配置,网上一搜一大堆,为了方便阅读,我将其粘贴到本作文的最后,我想重点说的是问题的解决方法. 由于系统部署时并没实用到群集,仅仅有一台server,所以,用户出现这个问题显然并不是是不同的MachineKey所致,假设我硬在配置文件里加 上一个MachineKey,肯定不能解决问题.况且,全公司上百号人使用这个系统,已经正常执行

VS2012的Web.config中使用machineKey

在VS2012中新建项目,Web.config中使用machineKey,总是报错: “验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的validationKey 和验证算法.不能在群集中使用 AutoGenerate.” 后来从网上查找原因,发现是升级至ASP.NET 4.5后导致的. ASP.NET 4.5的默认设置是: <machineKey compatibilityMode="Framework45&qu