从现在开始,我第一次在开始调试我的MVC应用程序时收到这个错误
Validation of viewstate MAC failed. If
this application is hosted by a Web
Farm or cluster,ensure that
configuration specifies
the same validationKey and validation
algorithm. AutoGenerate cannot be used
in a cluster.
全堆栈跟踪
[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>
解决方法
发生这种情况的直接原因是因为防伪cookie无效.关闭并重新打开浏览器应该可以解决问题.您也可以尝试删除与测试站点相关联的cookie.
现在为了根本原因,这通常是因为
>你在一个网络农场场景中,你的各种服务器没有一样的方式(但是你说的不是这样)
>应用程序会更改自动生成的MAC,因为您对应用程序配置所做的更改
>您最近应用了修补程序来修复Asp.Net ViewState加密漏洞(这改变了在asp.net中执行加密的方式).
这听起来很熟悉吗?