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

2.可能原因
   1) ASP.Net的 runat='server' 会对ViewStat进行MAC的加密,使得提交数据时只能对同一页面进行。
   2) Cookie超时
   3) 错误三的原因可能是代码写错了,即把数据不是提交给本页,而是提交给了其他页面,如下:
   <body>
   <form id="uploadForm" method="post" runat=server action="Main.aspx?act=upload&amp;path=<%= Server.UrlEncode(folderPath) %>" enctype="multipart/form-data">
<div id="container">
3. 处理方法
1 在接收页加上(不添加ViewState,非安全方法) 
@ page EnableViewStateMac="false"
或者 enableEventValidation="false" viewStateEncryptionMode ="Never"
当然也可以在web.config的节点里加入:
<system.web>
    <pages enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false/>
</system.web>
====================================================================
enableViewState 可选的 Boolean 属性, 默认值为 True。
指定视图状态是否启用并在多个页请求之间保持。
enableViewStateMac 可选的 Boolean 属性, 默认值为 True。
指定从客户端回发页时,ASP.NET 是否应该对页的视图状态运行消息身份验证代码 (MAC)。如果为 True,将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。
viewStateEncryptionMode 可选的 ViewStateEncryptionMode 属性, 默认值为 Auto。此属性是 .NET Framework 2.0 中的新属性。
Always 视图状态始终加密。
Never 视图状态从不加密,即使控件请求加密时也是如此。
Auto 视图状态根据控件的请求而加密。
2 配置matchineKey(安全的方法)
<system.web>
    <machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211"
decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" decryption="3DES"/>
</system.web>
3.
在<head></head>之间加入如下代码
<meta http-equiv="Page-Enter" content="RevealTrans(Duration=0,Transition=0)" />
以上方法来源自网络,我使用了以上的方法,没一个成功的,后来才发现原来我的代码写错。
4.错误三执行后的结果,如图在浏览器中显示为如下:
http://localhost:7124/Main.aspx?act=upload&path=%3C%=%20Server.UrlEncode(folderPath)%20%%3E
是由于"%3C%=%20Server.UrlEncode(folderPath)%20%%3E"这部分代码造成的后果,只要把它修改为,实际值就可以了。
最后我把
   <body>
   <form id="uploadForm" method="post" runat=server action="Main.aspx?act=upload&amp;path=<%= Server.UrlEncode(folderPath) %>" enctype="multipart/form-data">
<div id="container">
先修改成
   <body>
   <form id="uploadForm" method="post" runat=server action="upload.aspx?act=upload&amp;path=<%= Server.UrlEncode(folderPath) %>" enctype="multipart/form-data">
<div id="container">
执行之后,系统显示的错误信息如下:

“/”应用程序中的服务器错误。


路径中具有非法字符。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentException: 路径中具有非法字符。
最终修改成了
   <body>
   <form id="uploadForm" method="post" runat=server action="upload.aspx?act=upload&amp;path=" enctype="multipart/form-data">
<div id="container">
就解决了问题。把数据提交给了本页面,而不是其他页面。
所以很多时候,是由于自己写代码的时候不当心造成的。

验证视图状态 MAC 失败的解决办法相关推荐

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

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

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

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

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

    今天做了个首页登陆的页面,是用Request.Form接收参数的 然后又做了个测试页面test.aspx,代码如下: <body>     <form id="form1& ...

  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. 验证DNS解析失败:解决办法之一

    今天晚上练习简单的DNS解析验证: 环境是在一台虚拟机上搭建,另一台虚拟机验证,步骤如下: 虚拟机A: 1.安装软件包 bind  和bind-chroot [root@svr7 ~]# yum -y ...

最新文章

  1. 在CentOS 6.6 64bit上为vim 7.4安装并配置vim-airline插件
  2. Java实现替换多个字符串中的参数
  3. mysql函数(二.数字函数)
  4. 开工第一天,这个超时问题把我干趴下了
  5. SAS 9.4 破解时间限制
  6. netstat 的10个基本用法
  7. swftool pdf2swf使用
  8. C++二维vector初始化大小方法
  9. linux命令 复制文件,linux复制文件的命令是什么?
  10. 靠写作杀出一条“血”路——我的2020年终总结
  11. app如何控制手机横屏
  12. 知道建模中的UV吗?
  13. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java软件学院门户网站u09k9
  14. 沈师 Java程序设计 PTA 填空题、程序填空题答案
  15. faster rcnn:towards real-time object detection with region proposal network
  16. MFC版 黄金矿工 游戏开发记录
  17. 成功的自动化测试:测试员的故事
  18. 【深入vue3+Typescript技术栈】2021 coderwhy大神新课高清百度网盘持续更新 王红元老师 腾讯课堂
  19. vscode输入英文时字体之间的间隔突然变大
  20. python中判断生肖和星座哪个准_十二生肖PK十二星座,到底哪个更准?

热门文章

  1. OpenGL simpleclear简单刷背景的实例
  2. C++brent method布伦特方法找extrema极值的算法(附完整源码)
  3. C语言鸡尾酒排序cocktail sort算法(附完整源码)
  4. vector和deque的区别?
  5. C++中overload,override,overwrite的区别?
  6. java关于包的叙述_Java中构造方法,包的引用,final,super等词的概括
  7. micropython文件上传软件_ESP32玩转MicroPython(二) 连接WIFI网络 webperl文件传输
  8. Solr单集代码调用案例
  9. shell编程--基本格式,基本语法,运算符,expr,(()),$[]
  10. 03_dbcp数据源依赖jar包,DBCP中API介绍,不同过dbcp方式使用dbcp数据库连接池,通过配置文件使用dbcp数据库连接池