今天做了个首页登陆的页面,是用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失败问题正确的解决办法相关推荐

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

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

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

    在网上搜寻了很久看了很多关于MAC验证视图状态失败的解决方法.大部分人都说是在页里或web.config里加 EnableEventValidation="false" Enabl ...

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

    "/"应用程序中的服务器错误. 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationK ...

  4. 验证视图状态 MAC 失败

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

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

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

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

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

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

    MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate . 解决办法: 在出错页面添加: < ...

  8. 跨服务器post数据失败:验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 machineKey 配置指定了相同的 validationKey 和验证算法。的解决办法

    非常简单,在webconfig中的 system.web中加入以下代码即可. <pages  enableViewStateMac="false"></pages ...

  9. 验证视图状态 MAC 失败,配置machineKey

    在webconfig中system.web节点下添加: <system.web><machineKey validationKey="3FF1E929BC0534950B0 ...

最新文章

  1. 无源码修改exe文件图标
  2. 大数据时代 如何让用户上网更放心
  3. pip在安装模块时提示Read timed out
  4. 快来领猪肉啊,网易云官网建设意见征集计划获奖名单公布
  5. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
  6. python全局变量的声明和使用_Python二级(07)——函数和代码复用
  7. python自带的解释器叫做_python学习
  8. RabbitMQ学习笔记-RabbitMQ深入理解
  9. ArcGIS的文件结构
  10. [转]busybox登陆后没要求输入密码的解决办法
  11. BLOB存储图片文件二进制数据是非对错
  12. SqlServer存储过程详解
  13. oracle本地数据库登录之连接pdb数据库
  14. 开发中常用的网址(快速解决方法)、免费的api接口地址、以及外包的接私活平台
  15. 【MOGDB/openGauss的txid_snapshot 数据类型和相关函数】
  16. 基于Gin+Vue+ElementUI实现的微信公众号平台系统
  17. App 上线被拒绝的原因有哪些?
  18. 白钢条用什么可以切割_白钢用什么切割?
  19. 复杂电路简化经典例题_复杂电路简化练习题
  20. 浅析电容式触摸感应原理与类型

热门文章

  1. socket-tcp 、udp、rawIP
  2. linux如何使用物理内存_10 张图解再谈 Linux 物理内存和虚拟内存
  3. 服务器怎么查看数据库文件,怎么查看服务器上的数据库文件
  4. bat tomcat程序在后台执行_Web中间件漏洞之Tomcat篇
  5. 自动阈值检测_金融科技讲堂之三|金融企业如何在大数据中进行异常检测(一)...
  6. Atlas 和 ASP.Net AJAX
  7. JVM内存堆布局图解分析
  8. js比较两个String字符串找出不同,并将不同处高亮显示
  9. 操作系统及编程语言历史以及shell命令
  10. [bzoj3879]SvT_后缀数组_RMQ_单调栈