ASP.NET MVC AntiForgeryToken在GET请求时抛出异常?

3
我在几个MVC应用程序中遇到了一个奇怪的错误,以前没有注意到过;它在我的应用程序中发生(全面性),并且当我尝试运行最新的Orchard版本时也发生了这种情况(所以我知道这不仅仅是我的代码)。
基本上,问题是当我访问页面时,我会得到应该抛出的异常,但是我得到它时,需要提供AntiforgeryToken,但我正在获取GET操作;第一次访问页面时。
我追踪了这种行为,发现当我重建应用程序或重新部署它时会发生。例如,我在本地IIS服务器上运行我的网站,然后更改设置以在Cassini中运行(显然在中间进行了重建等操作),我遇到了错误。同样的事情发生在我删除Orchard网站并在相同的VS中重建它时。在我重新部署在Web上的网站时也是如此。
我找到的解决方案是清除浏览器的Cookie,但似乎非常奇怪,当针对端点执行GET时,您会遇到该错误,还是我漏掉了什么?
2个回答

2

这是因为Cookie被不同的环境加密。如果没有指定用于加密的机器密钥,.NET会使用嵌在machine.config中的默认值。

要解决此问题,请在web.config中添加手动机器密钥定义:

<system.web>    
<machineKey validationKey="stuff" decryptionKey="stuff" validation="SHA1" decryption="AES" />

使用此工具生成一个密钥:

http://aspnetresources.com/tools/keycreator.aspx


我会尝试一下,如果有效的话就标记答案,谢谢。我之前没有考虑到这个。 - Paul

1
你确定你要执行的操作没有使用 [ValidateAntiForgeryToken] 属性进行修饰吗?只有在使用该属性时才会抛出此异常。

肯定的。这是在Create方法的GET端被触发的。它没有ValidateAntiForgeryToken属性,尽管POST端有。这也跨越了许多不同的应用程序。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接