jquery - Ajax 调用中无法识别 AntiforgeryToken

标签 jquery ajax asp.net-mvc csrf antiforgerytoken

我有一个场景,我不需要发送表单数据,但需要通过 ajax 调用发送一些其他数据。我有一个包含 html.AntiForgeryToken() 的表单。

这是我尝试过的。

var modid = $("#moduleList").val();
var data = {};
data.modid = modid;

var token = $('#frmmmenu input[name="__RequestVerificationToken"]').val();
data.__RequestVerificationToken = token;
//var dataWithToken = $.extend(data, token);
$.ajax({
    type: "POST",
    url: "Home/MainMenu",
    data: JSON.stringify(data),
    //contentType: "application/json; charset=utf-8",  // request data type
    dataType: "html",  // response data type
    success: function (msg) {

        $("#accordion").html(msg);
    },
    error: function (msg) {
        alert("Ajax Error");
    },
});

但我不断收到所需的防伪表单字段“__RequestVerificationToken”不存在。错误。

这是 Firebug 屏幕抓取

enter image description here

我的操作方法也用 ValidateAntiForgeryToken 装饰

[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult MainMenu(int modid)
{
}

这是什么原因造成的?有什么想法吗?

编辑: 这是一个 MVC5 项目。

最佳答案

找到了解决方案。

罪魁祸首是

data: JSON.stringify(data),

将上面的内容更改为

data: data,

现在 Firebug 显示

enter image description here

希望有人可以用 JSON 发布解决方案,因为 URL 长度有限,尽管它需要 contentType application/x-www-form-urlencoded

感谢大家的支持。

关于jquery - Ajax 调用中无法识别 AntiforgeryToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309503/

相关文章:

javascript - $.ajax() 成功不会运行函数

c# - 对列表项使用标签帮助器验证

asp.net-mvc - 如何创建基于 Azure 的 WCF Restful API

asp.net-mvc - ASP .Net Core 自定义标记帮助器将 CamelCase 属性转换为空格

javascript - 查找类包含文本字符串 JQuery 的跨度

jquery - html 和 css - 多级元素显示

php - mt_rand() 在 Windows 中可以生成的最大数量是多少?

jquery - CORS post 不适用于 Rails 应用

javascript - 如何使用php和ajax强制下载图像而不显示它

javascript - Jquery - BBC +/- 按钮