互联网上确实有很多关于这个问题的信息,但没有任何帮助。
这是我的客户代码:
var token = $('form[action="/Storage/AddReceipt"] input[name="__RequestVerificationToken"]').val();
var addAntiForgeryToken = function(data) {
data.__RequestVerificationToken = token;
return data;
};
var success = function (result) {
alert(result.success);
};
$.ajax({
url: '@Url.Action("AddReceipt", "Storage")',
type: 'POST',
contentType: 'application/json',
data: addAntiForgeryToken({ Number: 1, BatchDate: '24/03/2015' }),
success: success,
error: function (xhr, textStatus, errorThrown) {
alert(errorThrown);
}
});
和控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddReceipt(...) {...}
和服务器对我的要求的反应 -
所需的防伪表格字段 " __ RequestVerificationToken"不存在。
但正确的令牌正在发送:
return JSON.stringify(data);
和
$.ajax({
...
data: $('form[action="/Storage/AddReceipt"]').serialize(),
...
}
也没有帮助。
答案 0 :(得分:1)
您错过了将__RequestVerificationToken
添加到请求headers
。添加如下。
$.ajax({
url: '@Url.Action("AddReceipt", "Storage")',
type: 'POST',
contentType: 'application/json',
headers:{__RequestVerificationToken : token},
data: JSON.stringify(addAntiForgeryToken({ Number: 1, BatchDate: '24/03/2015' })),
success: success,
error: function (xhr, textStatus, errorThrown) {
alert(errorThrown);
}
});
我们必须将防伪令牌添加到请求header
。