我在一些我以前没有注意到的MVC应用程序中遇到了一个奇怪的错误;它发生在我的应用程序中(全面)并且当我尝试运行最新的Orchard drop时发生这种情况(所以我知道它不仅仅是我的代码)。
基本上,问题是我得到了在没有提供AntiforgeryToken时应该抛出的异常,但是在预期的情况下,只有当我点击GET操作时才会得到它;我第一次访问页面。
当我重建应用程序或重新部署应用程序时,我已经跟踪了这种行为。例如,我在我的本地IIS服务器上运行我的站点,然后将设置更改为在Cassini中运行(显然在中间重建等)并且我得到了错误。当我取消Orchard网站并重建它时(在同一个VS中)也是如此。当我重新部署网站上的网站时也一样。
我找到的解决方案是清除我的浏览器cookie,但是在对端点进行GET时遇到错误或者我错过了某些内容似乎很奇怪?
答案 0 :(得分:2)
这是因为cookie由不同的环境加密。如果没有指定用于加密的机器密钥,.NET将使用埋在machine.config中的那个。
要修复在web.config中添加手动机器密钥定义:
<system.web>
<machineKey validationKey="stuff" decryptionKey="stuff" validation="SHA1" decryption="AES" />
用它来生成一个:
答案 1 :(得分:1)
你是肯定的,你正在击中的动作没有用[ValidateAntiForgeryToken]
属性装饰?仅当您具有属性时才会抛出此异常。