Я работаю в приложении ASP.NET MVC4, и все данные массива, отправленные на сервер через ajax, должны отправляться с использованием опции traditional
. (нет []
для переменных POST).
Проблема в том, что у меня также есть настройка фильтра, которая требует отправки AntiforgeryToken с каждым ajax POST.
я это исправил используя ajaxPrefilter
так:
$.ajaxPrefilter(function (options, originalOptions) {
if (options.type.toUpperCase() == "POST") {
options.data = $.param($.extend(originalOptions.data, { __RequestVerificationToken: "antiForgeryToken" }));
}
});
Это прекрасно работает, и добавляет __RequestVerificationToken
ко всем должностям. Однако это также приводит к тому, что мои данные не могут быть параметризованы в соответствии с флагом traditional
.
Кто-нибудь знает, как я могу изменить свой предварительный фильтр, чтобы объяснить это?
Пример можно найти здесь: http://jsbin.com/IxoKIKA/2/edit
Почему вы используете токен анти-подделки для AJAX? Это совершенно бесполезно. Подтвердите, что это ajax с соответствующим заголовком. –
@BenjaminGruenbaum Существует '' IFilterProvider'', который добавляет '' ValidateAntiForgeryTokenAttribute'' ко всем запросам POST, включая вызовы ajax. Наверное, я могу проверить, является ли конкретный POST вызовом XHR, а не добавлять его на основе этого. – Kippie