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"
        />
    ...

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...