zoukankan      html  css  js  c++  java
  • 验证视图状态 MAC 失败

    起因:

    最近在做一个项目需要用到生成多个Html页,采用一下方法动态生成。

       WebRequest request = WebRequest.Create(pageurl);
       WebResponse response = request.GetResponse();
       Stream resstream = response.GetResponseStream();
       StreamReader sr = new StreamReader(resstream, System.Text.Encoding.UTF8);
       string contenthtml = sr.ReadToEnd();
       resstream.Close();
       sr.Close(); //写入文件

    生成的页面在完成页面动作时,需要进行页面跳转。当跳转至新页面时出现一下错误:

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

    尝试过很多解决方案。

    分析:

    当runat="server"的表单通过修改action提交数据到其它页面时,会引发这个问题。

    主要的原因是提交了名为__VIEWSTATE的数据,ASP.NET的验证视图状态的时候失败。

    有提交前禁用__VIEWSTATE即可:

    解决方法:

    1、去掉 runat="server"

    2、添加enableEventValidation="false" enableViewStateMac="false"

    或在webconfig中添加<pages enableEventValidation="false" enableViewStateMac="false" />

    3、在webconfig中添加:<machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryption="3DES" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" />

    参考:

    MSN 上关于machinekey:

    http://msdn.microsoft.com/zh-cn/library/w8h3skw9(v=VS.80).aspx

    http://msdn.microsoft.com/zh-cn/library/dtkwfdky(v=VS.80).aspx

    4、不使用跨页面提交,提交到本页后在page.load中redirect.

    5、使用 <asp:Button runat="server" PostBackUrl="~/Register/DoRegister.aspx" Text="提交" />

    最终解决:

    试了很多的方法,最终通过最后一个方法设置PostBackUrl跳转才得以解决。

  • 相关阅读:
    【Struts 动态表单】DynaActionForm
    【Struts 分派Action】DispatchAction
    【struts 报错】 No action config found for the specified url
    【Struts APP_PATH】StartSystemListener
    【Struts 编码】
    【Struts 基础案例】
    28. 实现 strStr()
    14. 最长公共前缀
    2. 两数相加
    15. 三数之和
  • 原文地址:https://www.cnblogs.com/loyung/p/5029791.html
Copyright © 2011-2022 走看看