Недавно я обновил сайт, над которым работаю, чтобы проверить токены защиты от подделки во всех запросах POST. Для запросов ajax я включил предварительный фильтр, чтобы проверить токен защиты от подделки и добавить его в заголовки.
$.ajaxPrefilter(function (options, localOptions, jqXHR) {
if (options.type == "POST") {
var token = GetAntiForgeryToken();
jqXHR.setRequestHeader(token.name, token.value);
}
});
На сайте также есть инструменты администратора, если вы вошли в систему как администратор, который использует CORS для отправки данных на отдельный сайт администратора. Одним из таких инструментов является почтовый запрос AJAX. Заголовок добавлен в запрос и работает корректно.
Другой инструмент — это запрос GET, который возвращает форму, отображаемую в диалоговом окне. Это прекрасно работает. Однако, когда форма отправлена, запрос OPTIONS предварительной проверки соответствует 302, и я получаю сообщение об ошибке «Ответ для предварительной проверки недействителен (перенаправление)».
Если я удалю ajaxPrefilter, сообщение формы будет работать, а запрос прямого сообщения - нет. При включенном предварительном фильтре прямой запрос на публикацию работает, а публикация в форме — нет. Я довольно потерян. Заголовок защиты от подделки разрешен в Access-Control-Allow-Headers. Запросы для обоих:
OPTIONS http://localhost:64789/Example/Example/?_=1464356730712 HTTP/1.1
Host: localhost:64789
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64947
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type
Accept: */*
Referer: http://localhost:64947/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Этот возвращает 302.
OPTIONS http://localhost:64789/Example2/Example2/ HTTP/1.1
Host: localhost:64789
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http://localhost:64947
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Access-Control-Request-Headers: __requestverificationtoken, accept, content-type
Accept: */*
Referer: http://localhost:64947/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Этот возвращает 200.
Любая помощь будет действительно полезной.