代码之家  ›  专栏  ›  技术社区  ›  Paul

ASP.NET MVC AntiforgeryToken在get上引发异常?

  •  3
  • Paul  · 技术社区  · 14 年前

    我在几个MVC应用程序中发现了一个我以前没有注意到的奇怪错误;它发生在我的应用程序中(全面的),也发生在我尝试运行最新的Orchard Drop时(所以我知道这不仅仅是我的代码)。

    基本上,问题是我得到了一个异常,当没有提供反组织令牌时应该抛出这个异常,但这是预期的,只有当我点击get操作时才会得到它;我第一次访问页面时。

    我已经追踪到当我重新构建或重新部署应用程序时发生的行为。例如,我在本地的IIS服务器上运行我的站点,然后将设置更改为在Cassini中运行(显然是在中间重建等),我得到了错误。同样的事情,当我废弃了一个果园,并重建了它(在相同的vs)。同样,当我重新部署一个我在网上拥有的网站时。

    我找到的解决方案是清除我的浏览器cookie,但是当对端点执行get操作时,您会遇到这个错误,或者我遗漏了什么,这看起来很奇怪。

    2 回复  |  直到 14 年前
        1
  •  2
  •   John Farrell    14 年前

    这是因为cookie是由不同的环境加密的。没有为加密指定机器密钥,.net使用machine.config中隐藏的密钥。

    要修复在web.config中添加手动机器密钥定义的问题,请执行以下操作:

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

    使用此项生成一个:

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

        2
  •  1
  •   Darin Dimitrov    14 年前

    你肯定你的动作没有装饰 [ValidateAntiForgeryToken] 属性?只有在具有属性的情况下才会引发此异常。