【发布时间】:2016-07-18 11:54:33
【问题描述】:
我有一个场景,我不需要通过 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");
},
});
但我不断收到The required anti-forgery form field "__RequestVerificationToken" is not present。错误。
这是 Firebug 屏幕截图
我的操作方法也用 ValidateAntiForgeryToken 修饰
[HttpPost]
[Authorize]
[ValidateAntiForgeryToken]
public ActionResult MainMenu(int modid)
{
}
这是什么原因造成的?有什么想法吗?
编辑: 这是一个 MVC5 项目。
【问题讨论】:
-
@RoryMcCrossan 与萤火虫帖子中的值相同。
-
看看this的回答。
-
ValidationAntiForgeryTokeAttribute不支持来自 JSON 的令牌。 Kayess 的答案没有将值编码为 JSON,该答案使用 Form Encoded 值。 -
@ErikPhilips 没错!就我而言,我没有序列化表单并从头开始创建对象。发送 JSON 的旧习惯导致错误:(
-
我只使用JSON,所以我从属性中派生出来,自己写。除非你做的是非常基本的事情,否则标准的 URL 编码非常糟糕。
标签: jquery ajax asp.net-mvc csrf antiforgerytoken