Я работаю над проектом Asp.net MVC 5
и знаю, что есть 2 способа передать AntiForgeryToken
серверу в вызовах ajax
:
- Поместите это в
Header
- Поместите это в
Data
Мне нравится помещать
AntiForgeryToken
вrequest header
, и мои коды хорошо работают как на стороне клиента, так и на стороне сервера. Я следил за этим статья.
Я ставлю AntiForgeryToken
в каждый $.ajax
вызов header
, и все работает отлично.
Но
Теперь я решил написать новые коды, чтобы добавить AntiForgeryToken
ко всем вызовам Ajax
, имеющим тип POST
на моей странице, и удалить настройку заголовка в каждом блоке $.ajax
кодов.
Затем я написал этот код для реализации своего решения, и он работает хорошо, когда у меня есть одна форма на моей странице (я не проверял его в сложных случаях, таких как несколько форм в страницу и...):
var antiForgerytoken = $('input[name="__RequestVerificationToken"]').val();
$.ajaxPrefilter(function (options, originalOptions, jqXhr) {
if (options.type.toUpperCase() == "POST") {
jqXhr.setRequestHeader("__RequestVerificationToken", antiForgerytoken);
}
});
Мои вопросы:
- Имеет ли это решение какой-либо безопасный или нежелательный побочный эффект?
- Когда у меня есть несколько форм на моей странице, каждая из которых создана с помощью различного частичного представления и будет обрабатываться разными действиями в разных контроллерах, я должен найти связанные
AntiForgeryToken
в каждой форме и внедрить его во все вызовы Ajax, связанные с этой формой? Или достаточно только приведенных выше кодов?
Возможно, в основе этого вопроса лежит другой вопрос, который написал здесь и @DarinDimitrov ответил на него, включая это описание:
ASP.NET MVC
просто повторно использует одно и то же значение для всех форм, поэтому ему не нужно знать, какая форма отправила запрос, чтобы проверить его.
Является ли это правило абсолютным? Вы знаете какую-нибудь ссылку? В комментариях к ответу @DarinDimitrov я увидел противоположное мнение
- Если я должен вести себя с каждой формой
AntiForgeryToken
отдельно, как мне изменить приведенные выше коды, чтобы глобально установитьAntiForgeryToken
в заголовке Ajax для работы со всеми формами, отображаемыми на страницеMVC
?