发布我的ASP.NET MVC Web应用程序的新版本后,我经常看到浏览到该站点时抛出此异常:
System.Web.Mvc.HttpAntiForgeryException:未提供所需的防伪标记或无效.---> System.Web.HttpException:viewstate MAC验证失败.如果此应用程序由Web场或群集托管,请确保配置指定相同的validationKey和验证算法.AutoGenerate不能在群集中使用.---> System.Web.UI.ViewStateException:无效的viewstate.
在我的Web应用程序中访问的每个页面上都会继续发生此异常,直到我关闭Firefox.重新打开Firefox后,该网站运行良好.知道发生了什么事吗?
补充说明:
Dun*_*unc 32
在幕后,MVC AntiForgeryToken属性使用machinekey进行加密.如果未在web.config中指定machinekey(请参见此处),则ASP.NET会自动为您生成一个(完整描述).
如果重新启动ASP.NET应用程序(例如,执行iisreset),浏览器cookie中的AntiForgeryToken仍将使用旧机器密钥加密,因此它会因上述错误而崩溃.
因此,在使用MVC时,应始终在web.config中指定machinekey,例如
<configuration>
<system.web>
<machineKey
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6078 次 |
最近记录: |