所需的防伪表单字段“__RequestVerificationToken”不存在

时间:2015-03-19 06:55:32

标签: ajax asp.net-mvc-5 antiforgerytoken

互联网上确实有很多关于这个问题的信息,但没有任何帮助。

这是我的客户代码:

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"不存在。

但正确的令牌正在发送:

enter image description here

return JSON.stringify(data);

$.ajax({
            ...
            data: $('form[action="/Storage/AddReceipt"]').serialize(), 
            ...
            }

也没有帮助。

1 个答案:

答案 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