MVC应用程序调试出错:viewstate MAC验证失败

时间:2010-11-06 01:43:54

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

现在开始表单,第一次,当我开始调试我的MVC应用程序时,我收到此错误

  

viewstate MAC验证失败。如果   此应用程序由Web托管   农场或集群,确保    配置指定   相同的validationKey和验证   算法。无法使用AutoGenerate   在群集中。

完整堆栈跟踪

[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>

2 个答案:

答案 0 :(得分:2)

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

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

  • 您处于Web场景中,并且您的各种服务器不会以相同的方式进行配置(但您说的不是这种情况)
  • 由于您对应用配置所做的更改,应用程序会更改自动生成的MAC
  • 您最近应用了修补程序来修复Asp.Net ViewState加密漏洞(这改变了在asp.net中执行加密的方式)。

这听起来很熟悉吗?

答案 1 :(得分:1)

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