asp.net-mvc – ASP.NET MVC验证ViewState MAC失败

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC验证ViewState MAC失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在发布我的ASP.NET MVC Web应用程序的新版本之后,我经常看到浏览网站时抛出这个异常:

System.Web.Mvc.HttpAntiForgeryException:未提供必需的防伪令牌或无效。 —> System.Web.HttpException:viewstate MAC的验证失败。如果此应用程序由Web场或群集托管,请确保配置指定相同的验证关键字和验证算法。 AutoGenerate不能在群集中使用。 —> System.Web.UI.ViewStateException:无效的viewstate。

在我关闭Firefox之前,我在Web应用程序中访问的每个页面上将继续发生这种异常。重新打开Firefox后,该网站工作完美。任何想法发生了什么?

补充笔记:

>我没有使用任何ASP.NET Web控件(在我的应用程序中没有runat =“server”的实例)
>如果我取出<%= Html.AntiForgeryToken%>从我的网页,这个问题似乎消失了

解决方法

在封面下,MVC AntiForgeryToken属性使用machinekey进行加密。如果您没有在web.config中指定一个machinekey(参见 here),ASP.NET( full description)将为您自动生成一个。

如果ASP.NET应用程序重新启动(例如执行iisreset),则浏览器cookie中的AntiForgeryToken仍将使用旧的机器密钥进行加密,因此为什么它会以上述错误崩溃。

所以你应该总是在使用MVC时在web.config中指定一个machinekey。

<configuration>
    <system.web>
        <machineKey  
            validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
            decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
            validation="SHA1"
            decryption="AES"
        />
    ...
原文链接:/aspnet/253107.html

猜你在找的asp.Net相关文章