У меня есть приложение ASP.NET MVC 5 с использованием .Net 4.5.1. В приложении есть несколько методов JQuery ajax post, которые отправляют данные POST на сервер. Чтобы предотвратить подделку межсайтовых запросов (XSRF), я добавил следующее в _layout.cshtml
@Html.AntiForgeryToken()
а также javascript, который отправляет токен со всем ajax POST в HttpHeader
$(document).ajaxSend(function (event, jqXHR, ajaxOptions) {
if (ajaxOptions.type === 'POST') {
jqXHR.setRequestHeader('__RequestVerificationToken', $('input[name="__RequestVerificationToken"]').val());
}
});
а затем в методе действия контроллера у меня есть
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Save(MyModel model)
{
//save and return json data
}
Однако исключение ValidateAntiForgeryToken Thorwing
Отсутствует обязательное поле формы защиты от подделки «__RequestVerificationToken».
Я проверил, что __RequestVerificationToken
добавляется в httpheader для каждого запроса Ajax POST.
У меня есть другое приложение, которое было разработано с использованием ASP.NET Core, и у меня там такая же функциональность (за исключением того, что имя заголовка RequestVerificationToken
вместо __RequestVerificationToken
), и оно работает в ASP.NET Core.
Почему то же самое не работает в ASP.NET MVC, когда токен включен в заголовок? Есть ли разница между ValidateAntiForgeryToken в ASP.NET Core и ASP.NET MVC 5?