在asp.net mvc项目生产环境中实现ValidateAntiForgeryToken时出现奇怪的错误消息

时间:2012-08-06 15:44:54

标签: asp.net asp.net-mvc

我正在为部署在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]

这在azure的DEV环境中完美无缺,但当我们进入不同的环境时,它会失败, 它抛出异常 “未提供所需的防伪标记或无效”

我观察到隐藏变量的值和cookie变量中的值是不同的。在我的开发环境中甚至是相同的,但它在开发环境中工作但不在测试中。请建议如何解决这个例外。

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

1 个答案:

答案 0 :(得分:0)

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

AntiForgeryData.GetUsername(context.User)

此方法返回userName为null,因此我将justed修改为

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

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