Обязательное поле формы защиты от подделки __RequestVerificationToken отсутствует

В интернете действительно много информации по этой проблеме, но мне ничего не помогло.

Это мой клиентский код:

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(), 
            ...
            }

тоже не помогает.


person Akmal Salikhov    schedule 19.03.2015    source источник


Ответы (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.

person Madhu    schedule 19.03.2015
comment
Смотрите мой обновленный код, попробуйте как JSON.stringify(addAntiForgeryToken({ Number: 1, BatchDate: '24/03/2015' })) - person Madhu; 19.03.2015
comment
@АкмальСалихов При установке contentType как application/json мы должны указать данные для передачи на сервер. пожалуйста, попробуйте выше, полезно ли это. - person Madhu; 20.03.2015
comment
Хорошо, но я подозреваю, что причиной может быть contentType, нужно ли пытаться удалить его? - person Madhu; 20.03.2015