验证视图状态MAC失败问题正确的解决办法
今天做了个首页登陆的页面,是用Request.Form接收参数的
然后又做了个测试页面test.aspx,代码如下:
<body>
<form id="form1" runat="server" method="post" action="Default.aspx">
<div>
<input type="text" runat="server" id="Solution" value="(Local)" />
<input type="text" runat="server" id="UserName" value="ricky" />
<input type="text" runat="server" id="Password" value="111" />
<input type="submit" runat="server" />
</div>
</form>
</body>
但是测试的时候发现test页面始终post到他自己
去掉runat标记则可以post到default.aspx,但去不到值
后来在IE里面查看源代码,发现html是这个样子的<form id="form1" method="post" action="test.aspx">
也就是说生成的html里始终是post到自己的
知道问题就好办了
修改代码:
<form id="form1" runat="server" method="post" οnsubmit="this.action='Default.aspx'">
一切OK,post到default.aspx了
然后又报错了
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
去网上搜了搜,说问题的原因是asp.net的runat='server' 会对ViewStat进行MAC的加密,解决办法基本上就2个:
1:修改当前页面的@page属性,添加enableEventValidation="false" viewStateEncryptionMode="Never"
或者在web.config里添加<pages enableEventValidation="false" viewStateEncryptionMode="Never" />
2:在web.config里指定validationKey和验证算法
<machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryption="3DES" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" />
可是实际试下来发现没用,问题依旧
查了查资料发现加上实际测试,终于发现了真正的解决办法
修改当前页面的@page属性,添加enableEventValidation="false" enableViewStateMac="false"
或者在web.config里添加<pages enableEventValidation="false" enableViewStateMac="false" />
原文地址:http://www.cnblogs.com/sephil/archive/2007/10/19/asp_net_post.html
(PS: 我发现如果是写在页面标记里,当前页和POST的目的页都需要写)
如果你的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>
转载于:https://www.cnblogs.com/easypass/archive/2009/12/08/1619127.html
验证视图状态MAC失败问题正确的解决办法相关推荐
- 验证视图状态 MAC 失败的解决办法
昨天用户反应系统中有问题,问题就在于翻页的时候,系统会报以下错误.但是我们的系统已经上线1年多了,从来没出现过错误,怎么会出现错误呢? 于是开始检测,查找原因. 1. 出错提示 "/&quo ...
- 验证视图状态MAC失败的解决办法
在网上搜寻了很久看了很多关于MAC验证视图状态失败的解决方法.大部分人都说是在页里或web.config里加 EnableEventValidation="false" Enabl ...
- 验证视图状态 MAC 失败 的解决办法
"/"应用程序中的服务器错误. 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationK ...
- 验证视图状态 MAC 失败
验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGene ...
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保machineKey...
验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGene ...
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 machineKey...
转自:http://hi.baidu.com/taotaowyx/blog/item/074bb8d83907bb3233fa1ce6.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群 ...
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate...
MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate . 解决办法: 在出错页面添加: < ...
- 跨服务器post数据失败:验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 machineKey 配置指定了相同的 validationKey 和验证算法。的解决办法
非常简单,在webconfig中的 system.web中加入以下代码即可. <pages enableViewStateMac="false"></pages ...
- 验证视图状态 MAC 失败,配置machineKey
在webconfig中system.web节点下添加: <system.web><machineKey validationKey="3FF1E929BC0534950B0 ...
最新文章
- 无源码修改exe文件图标
- 大数据时代 如何让用户上网更放心
- pip在安装模块时提示Read timed out
- 快来领猪肉啊,网易云官网建设意见征集计划获奖名单公布
- JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
- python全局变量的声明和使用_Python二级(07)——函数和代码复用
- python自带的解释器叫做_python学习
- RabbitMQ学习笔记-RabbitMQ深入理解
- ArcGIS的文件结构
- [转]busybox登陆后没要求输入密码的解决办法
- BLOB存储图片文件二进制数据是非对错
- SqlServer存储过程详解
- oracle本地数据库登录之连接pdb数据库
- 开发中常用的网址(快速解决方法)、免费的api接口地址、以及外包的接私活平台
- 【MOGDB/openGauss的txid_snapshot 数据类型和相关函数】
- 基于Gin+Vue+ElementUI实现的微信公众号平台系统
- App 上线被拒绝的原因有哪些?
- 白钢条用什么可以切割_白钢用什么切割?
- 复杂电路简化经典例题_复杂电路简化练习题
- 浅析电容式触摸感应原理与类型
热门文章
- socket-tcp 、udp、rawIP
- linux如何使用物理内存_10 张图解再谈 Linux 物理内存和虚拟内存
- 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件
- bat tomcat程序在后台执行_Web中间件漏洞之Tomcat篇
- 自动阈值检测_金融科技讲堂之三|金融企业如何在大数据中进行异常检测(一)...
- Atlas 和 ASP.Net AJAX
- JVM内存堆布局图解分析
- js比较两个String字符串找出不同,并将不同处高亮显示
- 操作系统及编程语言历史以及shell命令
- [bzoj3879]SvT_后缀数组_RMQ_单调栈