验证视图状态 MAC 失败的解决办法
昨天用户反应系统中有问题,问题就在于翻页的时候,系统会报以下错误。但是我们的系统已经上线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&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&path=<%= Server.UrlEncode(folderPath) %>" enctype="multipart/form-data">
<div id="container">
先修改成
<body>
<form id="uploadForm" method="post" runat=server action="upload.aspx?act=upload&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&path=" enctype="multipart/form-data">
<div id="container">
就解决了问题。把数据提交给了本页面,而不是其他页面。
所以很多时候,是由于自己写代码的时候不当心造成的。
验证视图状态 MAC 失败的解决办法的更多相关文章
- 验证视图状态MAC失败的解决办法
在网上搜寻了很久看了很多关于MAC验证视图状态失败的解决方法.大部分人都说是在页里或web.config里加 EnableEventValidation="false" Enabl ...
- 验证视图状态 MAC 失败,解决方法
错误信息 今天调试一个带cookie表单提交的页面时,浏览器中报错提示:验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 v ...
- System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
异常描述: Global.asax捕获到异常:System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 < ...
- form submit时将__VIEWSTATE和__VIEWSTATEGENERATOR一起post到另外的页面,出现验证视图状态 MAC 失败。
错误信息: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 AutoGenerate. 原因分析: F ...
- [异常记录(二)] 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
错误提示: 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法.不能在群集中使用 Au ...
- 验证视图状态MAC失败。如果此应用程序由网络场或群集承载,请确保配置指定了相同的validationKey和验证算法(转)
原文转自:http://www.cnblogs.com/Setme/archive/2012/06/05/2537084.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 ...
- 验证视图状态 MAC 失败
起因: 最近在做一个项目需要用到生成多个Html页,采用一下方法动态生成. WebRequest request = WebRequest.Create(pageurl); WebResponse r ...
- 验证视图状态MAC失败解决方案
验证视图状态 mac 失败.如果此应用程序由网络场或群集承载 请确保 machinekey 配置指定了相同的 validationkey 和验证算法.不能在群集中使用 autogenerate. 总是 ...
- 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey>
转自:http://hi.baidu.com/taotaowyx/blog/item/074bb8d83907bb3233fa1ce6.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群 ...
随机推荐
- Python学习三---序列、列表、元组
一.序列 1.1.序列概念 pythn中最基本的数据结构是序列(sequence). 序列中每个元素被分配一个序号-元素索引,第一个索引是0,第二个是1,以此类推.类似JAVA中数组和集合中的下标. ...
- 朝花夕拾-android 获取当前手机的内存卡状态和网络连接状态
序言: 人的一生是一个选择的过程. 如果脚下只有一条路,只要一往无前即可,不用担心走错.即使是错也别无它法.然而人是不安分的,况且安于独木桥的行走,其目的地由于没有蜿蜒曲折去遮挡行路人的视线,一往无前 ...
- ReSharper 卸载后 VS2012 没有提示问题
虽然ReSharper非常强大,但由于公司电脑配置太差,被迫卸载了.但发现卸载后,VS2012自带的提示都没有了. 网上找了下相关的解决方法.摘抄下来,作为自己笔记. 解决方法原文出处:http:// ...
- 设计模式 --- 模型-视图-控制器(Model View Controller)
模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...
- android 5.X之使用Palette
这几天为了学些android5.0版本sdk的新特性,折腾了好久.AndroidStudio被我反复的安装又卸载又安装,在eclipse和AndroidStudio 之间来回折腾.没想到sdk升级到5 ...
- 2012年 蓝桥杯预赛 java 本科 题目
2012年 蓝桥杯预赛 java 本科 考生须知: l 考试时间为4小时. l 参赛选手切勿修改机器自动生成的[考生文件夹]的名称或删除任何自动生成的文件或目录,否则会干扰考试系统正确采集您的解答 ...
- 烂泥:【解决】ubuntu提示ilanni不在sudoers文件中错误
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天在Ubuntu系统中新建一个用户ilanni,添加完毕后.在执行有关sudo的命令时,提示如下的错误信息:ilanni 不在 sudoers 文件中 ...
- uname
uname uname用于打印操作系统和硬件架构相关的信息,对于可能在多个系统或架构上运行的Shell脚本程序很有用, 缺省选项相当于 -s 或--system $uname [-amnrsvpio] ...
- jenkins maven svn 部署web项目到本地Tomcat
查了N多网页,折腾了几个小时,终于部署成功,部署的过程比较坎坷,遇到各种问题,记录一下,不管大家是否会遇到的同样的问题,希望有所帮助: 常规操作: 1.下载jenkins,必须要做的一步,http:/ ...
- js清除缓存方法
1.加入如下头描述 <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUI ...