Asp.net mvc ViewState MAC的ASP.NET MVC验证失败
发布ASP.NET MVC web应用程序的新版本后,我经常在浏览网站时看到引发此异常: System.Web.Mvc.HttpAntiForgeryException:未提供所需的防伪令牌或该令牌无效。-->System.Web.HttpException:viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定了相同的validationKey和验证算法。无法在群集中使用自动生成。-->System.Web.UI.viewstate异常:无效的viewstate 在我关闭Firefox之前,我在web应用程序中访问的每个页面上都会继续出现此异常。重新打开Firefox后,该网站运行良好。知道发生了什么吗 补充说明:Asp.net mvc ViewState MAC的ASP.NET MVC验证失败,asp.net-mvc,Asp.net Mvc,发布ASP.NET MVC web应用程序的新版本后,我经常在浏览网站时看到引发此异常: System.Web.Mvc.HttpAntiForgeryException:未提供所需的防伪令牌或该令牌无效。-->System.Web.HttpException:viewstate MAC验证失败。如果此应用程序由Web场或群集托管,请确保配置指定了相同的validationKey和验证算法。无法在群集中使用自动生成。-->System.Web.UI.viewstate异常:无效的viewstate
如果您在服务器场上,请确保每台服务器上的机器密钥都相同。在封面下,MVC AntiForgeryToken属性使用machinekey进行加密。如果未在web.config(请参阅)中指定machinekey,则ASP.NET()会自动为您生成一个machinekey 如果重新启动ASP.NET应用程序(例如执行iisreset),浏览器cookie中的AntiForgeryToken仍将使用旧的机器密钥加密,因此它会因上述错误而崩溃 因此,在使用MVC时,您应该始终在web.config中指定machinekey,例如
<configuration>
<system.web>
<machineKey
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>
...
...
我也有这个问题,希望用户清除缓存、cookie或刷新页面是不可接受的
将machinekey添加到web.config将解决此问题。我使用这个工具快速生成一个密钥,这样我在开发中就不会看到这些错误,然后在站点投入生产时正确地生成一个密钥
即使我像这样进入机器钥匙,仍然会出现错误。可能是服务器上的machine.config(我没有访问权限)配置不正确吗?@jesperlind:(有点晚了,但任何阅读此文件的人都可能会得到帮助…)您仍然会收到错误,因为在添加机器密钥之前,您有一个cookie。如果您从一开始就将机器钥匙锁定,则它只能在没有挂接的情况下工作。注意:不要使用上述代码中的确切机器钥匙。如果所有站点都有相同的机器密钥,那么很容易规避。使用联机machinekey生成器生成唯一密钥,例如Thank@Guffa。这意味着如果我们因为某种原因需要更换机器钥匙,我们就会被烟熏。我们必须要求用户删除他们的cookie才能再次使用该网站。根据我的经验,在Mvc2及以下版本中,AntiForgeryToken有点问题。最后,我编写了一个过滤器,捕获了HttpAntiforyException,然后:filterContext.HttpContext.Request.Cookies.Remove(“RequestVerificationToken_Lw”);直到现在我已经升级到Mvc3,我才删除了这个过滤器,从那以后我就没有任何问题了。@jesperlind:这是一个会话cookie,所以这只是在更新前后打开浏览器并访问站点的用户的问题。