1

我正在为部署在 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 站点的配置相同。

4

1 回答 1

0

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

AntiForgeryData.GetUsername(context.User)

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

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

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

于 2012-08-07T06:01:28.927 回答