【问题标题】:Error on MVC application debug : Validation of viewstate MAC failedMVC 应用程序调试错误:视图状态 MAC 验证失败
【发布时间】:2010-11-06 01:43:54
【问题描述】:

从现在开始,第一次,当我开始调试我的 MVC 应用程序时,我收到了这个错误

视图状态 MAC 验证失败。如果 此应用程序由 Web 托管 场或集群,确保 配置指定 相同的validationKey和validation 算法。无法使用自动生成 在一个集群中。

完整的堆栈跟踪

[ViewStateException: Invalid viewstate. 
    Client IP: 127.0.0.1
    Port: 
    Referer: 
    Path: /Login/LogOn
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.41 Safari/534.7
    ViewState: Fvq7WNUu+qCC00VbTIOTUuBvK4YHjxp3RubwsrFYW93hKlF7I4GLzaNHceRqjjJB0GwvRPWwlwE6brhAZAo+Mp191B/C+l8Dw/w7aQBDCpWGC3ox6hkSeZp10vbjm9eJFQZmGSPyC1rKYwApBBaz0Q==]

[HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.]
   System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +198
   System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) +14
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +274
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4
   System.Web.Mvc.AntiForgeryDataSerializer.Deserialize(String serializedToken) +176

这是什么意思?

请注意:该错误仅在调试期间发生。当我在本地 IIS 上部署应用程序时,一切正常。它出现在我的母版页的以下代码中

<form id="__AjaxAntiForgeryForm" action="#" method="post">
    <%= Html.AntiForgeryToken() %>
</form>

【问题讨论】:

  • 尝试清除浏览器缓存。
  • 刚刚制作没有成功。如果我重新启动计算机,一切正常运行半小时,然后问题再次出现......
  • 您是否将应用程序部署在负载平衡的服务器中?如果没有,请在此处查看此链接:blogs.msdn.com/b/tom/archive/2008/03/14/…
  • @mallows98:正如我所写的,该错误仅在 VS2010 内部调试期间发生,部署后从未发生过

标签: asp.net-mvc asp.net-mvc-2


【解决方案1】:

发生这种情况的直接原因是防伪 cookie 失效。关闭并重新打开浏览器应该可以解决问题。您也可以尝试删除与您的测试站点关联的 cookie。

现在对于根本原因,这通常是因为

  • 您处于网络农场场景中,并且您的各种服务器的配置方式不同(但您说情况并非如此)
  • 应用程序会更改自动生成的 MAC,因为您正在更改应用程序配置
  • 您最近应用了一个补丁来修复 Asp.Net ViewState 加密漏洞(它改变了在 asp.net 中执行加密的方式)。

这听起来很熟悉吗?

【讨论】:

  • 我绝对会排除第一点。关于第二点和第三点,我已经通过 Windows 更新为最近的 ASP.NET 漏洞安装了补丁,但问题仅在我将 Antiforgerytoken 添加到我的视图中后才开始出现.
【解决方案2】:

在未安装 KB2416471 的机器上查看时,我们在修补服务器以修复 ASP.NET 漏洞后遇到了类似问题。

【讨论】:

  • 您好,感谢您的帖子。这个问题似乎与我无关,因为它出现在您所指的补丁不存在的 Vista x64 上。无论如何,我通过 Windows 更新安装了 KB2416470、KB2416472 和 KB2416473
  • @Lorenzo 是的,令人惊讶的是,我们在从没有安装补丁的机器上查看网站时遇到了这个问题。
  • 这很有趣。但在我的情况下,有一些更奇怪的事情:如果我尝试在我的机器上调试应用程序(VS2010,SQLEXPRESS),就会出现问题。相反,当我总是在我的机器(IIS7、SQL EXPRESS)上进行本地部署时,问题不会出现......
  • @Lorenzo 听起来好像更新与 Cassini 发生了某种冲突。
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2012-01-01
  • 2010-09-24
  • 2011-12-18
相关资源
最近更新 更多