【问题标题】:ASP.NET MVC AntiForgeryToken throwing its exception on GET?ASP.NET MVC AntiForgeryToken 在 GET 上抛出异常?
【发布时间】:2010-06-22 21:40:14
【问题描述】:

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

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

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

我找到的解决方案是清除我的浏览器 cookie,但在对端点执行 GET 时遇到该错误似乎很奇怪,还是我遗漏了什么?

【问题讨论】:

    标签: asp.net-mvc antiforgerytoken


    【解决方案1】:

    这是因为cookie被不同的环境加密。在没有指定机器密钥进行加密的情况下,.NET 使用埋在 machine.config 中的那个。

    要修复在 web.config 中添加手动机器密钥定义:

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

    使用它来生成一个:

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

    【讨论】:

    • 我会试一试,并在可行时标记答案,谢谢。我没有考虑过。
    【解决方案2】:

    你确定你正在点击的动作没有用[ValidateAntiForgeryToken] 属性装饰吗?仅当您具有该属性时才会引发此异常。

    【讨论】:

    • 阳性。这在 Create 方法的 GET 端受到影响。尽管 POST 端有,但它没有 ValidateAntiForgeryToken 属性。这也适用于许多不同的应用程序。
    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多