昨天用户反应系统中有问题,问题就在于翻页的时候,系统会报以下错误。但是我们的系统已经上线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 失败,解决方法

    错误信息 今天调试一个带cookie表单提交的页面时,浏览器中报错提示:验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 v ...

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

    异常描述: Global.asax捕获到异常:System.Web.HttpException (0x80004005): 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 < ...

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

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

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

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

  6. 验证视图状态MAC失败。如果此应用程序由网络场或群集承载,请确保配置指定了相同的validationKey和验证算法(转)

    原文转自:http://www.cnblogs.com/Setme/archive/2012/06/05/2537084.html 验证视图状态 MAC 失败.如果此应用程序由网络场或群集承载,请确保 ...

  7. 验证视图状态 MAC 失败

    起因: 最近在做一个项目需要用到生成多个Html页,采用一下方法动态生成. WebRequest request = WebRequest.Create(pageurl); WebResponse r ...

  8. 验证视图状态MAC失败解决方案

    验证视图状态 mac 失败.如果此应用程序由网络场或群集承载 请确保 machinekey 配置指定了相同的 validationkey 和验证算法.不能在群集中使用 autogenerate. 总是 ...

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

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

随机推荐

  1. IOS之资源收集--很好的github网址

    1.Nick Jensen 2.关于直播的

  2. Swift中的类和结构体的相同点与不同点

     相同点: 1.都是有内部变量和函数 2.都可以有内部下标方式去取属性 3.都可以有初始化函数 4.都可以用协议   不同点: 1.类有继承 2.类可以多重引用 3.类有析构  

  3. 《笨办法学python第三版》习题26,原错误代码及正确代码

    #import ex25 1 def break_words(stuff): """This function will break up words for us.&q ...

  4. Effective Java 56 Adhere to generally accepted naming conventions

    Typographical naming conventions Identifier Type Type Examples Package com.google.inject, org.joda.t ...

  5. IE8下解决position:flxed无效的问题

    只需将文档类型声明改成如下方式即可 <!DOCTYPE html>

  6. apache CXF wsdl2java工具的使用

    cxf的wsdl2java命令和JDK的wsimport命令的区别和使用 JDK提供了一个wsimport.exe的命令,主要是用于将WebService生成客户端代码,然后好调用WebService ...

  7. Kali Linux 网络扫描秘籍 翻译完成!

    Kali Linux 网络扫描秘籍 翻译完成! 原书:Kali Linux Network Scanning Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 ...

  8. 动手学习TCP:客户端状态变迁

    上一篇文章中介绍了TCP连接的建立和终止. 通过实际操作了解到,在TCP协议工作过程中,客户端和服务端都会接收或者发送特定标志的TCP数据包,然后进入不同的状态. 也就是说,TCP协议就是一个包含多种 ...

  9. Java中的流

    一.Java中流的原理 流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行.设备可以是文件,网络,内存等. 四种基本流InputStream,Ou ...

  10. CREATE DATABASE permission denied in database 'master'.

    EF Code first 建立数据库时报这个错误 CREATE DATABASE permission denied in database 'master'. 解决方法: 打开 Sql Serve ...