【问题标题】:Weird error message while implementing ValidateAntiForgeryToken in asp.net mvc project production environment在 asp.net mvc 项目生产环境中实现 ValidateAntiForgeryToken 时出现奇怪的错误消息
【发布时间】:2012-08-06 15:44:54
【问题描述】:

我正在为部署在 Azure 中的 MVC 应用程序实现 ValidateAntiForgeryToken。

1) 我在主页添加了@Html.AntiForgeryToken()。

2) 我正在使用 Jquery $.Post 为 Post 操作发送数据,这是代码

   `var token = $('[name=__RequestVerificationToken]').val();

    var url = '/XX/YYYY/';
        $.post(url, { __RequestVerificationToken: token,reportname: reportName},
        function (data) { window.navigate(data.url) }
        );`

我将令牌传递给服务器并在 fiddler 中看到,将 Cookie 和隐藏变量传递给服务器。

3) 我将操作归因于 [HttpPost] 和 [ValidateAntiForgeryToken]

这在我的天蓝色开发环境中完美运行,但是当我们进入不同的环境时它会失败, 它抛出异常“未提供所需的防伪令牌或无效”

我观察到隐藏变量的值和 cookie 变量中的值是不同的。即使在我的开发环境中也是如此,但它在开发环境中有效,但在测试中无效。请建议如何解决此异常。

DEV 和 TEST azure 站点的配置相同。

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    我能够通过将 ValidateAntiForgeryTokenAttribute 类复制到我的解决方案中并为此属性类添加必要的辅助方法来追踪我的问题,因为大多数类或密封或内部。所以我必须复制代码并进行一些修改才能在我的蔚蓝环境中完美工作。基本上,问题出在

    AntiForgeryData.GetUsername(context.User)
    

    这个方法返回的 userName 有 null ,所以我刚刚修改为

     string currentUsername = AntiForgeryData.GetUsername(context.User) ?? string.Empty;
    

    然后它开始完美地工作,在 Azure 中最近发生的设置在 validateAntifogery 中发生得早,所以这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多