【问题标题】:Antiforgery tokens for multiple ajax json requests多个 ajax json 请求的防伪令牌
【发布时间】:2023-04-09 06:35:01
【问题描述】:

我在我的 MVC 应用程序中实现了以下代码,以在用户单击链接时加载一些 Json 对象。

<form>
    @Html.AntiForgeryToken()
</form>

$("body").on('click', ".clickhere", (function () {
var token = $('[name=__RequestVerificationToken]').val();

    $.ajax({
        type: 'POST',
        url: '/do/things',
        cache: false,
        headers: { "__RequestVerificationToken": token },
        contentType: 'application/json; charset=utf-8',
        data: data
 },
        success: function () {
            ...
        },
        error: function () {
            ...
        }
   });  
});

我根据this tutorial 验证令牌。奇怪的事实是,如果我从 Visual Studio 2015 中运行该项目,这是可行的,但如果它是作为 IIS 6.2 上的应用程序发布的,则不是。在 IIS 上运行时,我可以清楚地看到请求令牌不匹配。

【问题讨论】:

  • 可能会看到带有过期令牌的缓存页面。硬刷新会发生什么?
  • @charlietfl 结果相同

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

为了让它工作,我将视图中的代码更改为:

 @functions{
    public string GetAntiForgeryToken()
    {
        string cookieToken, formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);
        return cookieToken + "," + formToken;
    }
 }
<input type="hidden" name="__RequestVerificationToken" id="__RequestVerificationToken" value="@GetAntiForgeryToken()" />

【讨论】:

    猜你喜欢
    • 2015-05-11
    • 2016-10-25
    • 2013-11-16
    • 2018-06-19
    • 1970-01-01
    • 2018-04-13
    • 2011-05-17
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多