Как настроить вызовы jQuery Ajax для глобального внедрения AntiForgeryToken в заголовок запроса в Asp.Net MVC

Я работаю над проектом 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);
    }
});

Мои вопросы:

  1. Имеет ли это решение какой-либо безопасный или нежелательный побочный эффект?
  2. Когда у меня есть несколько форм на моей странице, каждая из которых создана с помощью различного частичного представления и будет обрабатываться разными действиями в разных контроллерах, я должен найти связанные AntiForgeryToken в каждой форме и внедрить его во все вызовы Ajax, связанные с этой формой? Или достаточно только приведенных выше кодов?

Возможно, в основе этого вопроса лежит другой вопрос, который написал здесь и @DarinDimitrov ответил на него, включая это описание:

ASP.NET MVC просто повторно использует одно и то же значение для всех форм, поэтому ему не нужно знать, какая форма отправила запрос, чтобы проверить его.

Является ли это правило абсолютным? Вы знаете какую-нибудь ссылку? В комментариях к ответу @DarinDimitrov я увидел противоположное мнение

  1. Если я должен вести себя с каждой формой AntiForgeryToken отдельно, как мне изменить приведенные выше коды, чтобы глобально установить AntiForgeryToken в заголовке Ajax для работы со всеми формами, отображаемыми на странице MVC?

person RAM    schedule 22.08.2016    source источник