AJAX Проводка ValidateAntiForgeryToken без формы в метод действия MVC
я смотрел на примеры того, как сделать это на SO и, насколько я могу судить, яЯ попробовал все примеры, которые могу найти, но безуспешно. Я'мы пытались изменить некоторые реализации в моем сценарии, но пока это тоже не удалось.
У меня есть это на моей странице в _layout.cshtml, поэтому у меня всегда есть токен:
@Html.AntiForgeryToken()
У меня также есть этот метод в моем файле утилит JavaScript:
AddAntiForgeryToken = function (data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
Это все работает, как ожидалось, и я получаю жетон защиты от подделки. Мой фактический почтовый код:
myPage.saveData = function() {
var saveUrl = '/exercises/PostData';
var myData = JSON.stringify(myPage.contextsArrays);
$.ajax({
type: 'POST',
async: false,
url: saveUrl,
data: AddAntiForgeryToken({ myResults: myData }),
success: function () {
alert('saved');
},
dataType: 'json',
contentType: "application/json; charset=utf-8"
});
};
Мой метод действия выглядит так: я
[HttpPost, ValidateAntiForgeryToken, JsonExceptionFilter]
public JsonResult PostData(List myResults)
{
return Json(_apiClient.SubmitResults(myResults));
}
я тестировал это с различными реализациями, которые яя пытался, и ответ всегда: я
{"errorMessage":"The required anti-forgery form field \"__RequestVerificationToken\" is not present."}
я не публикую формуэто просто массив данных, но проверка данных, которые действительно публикуются, Json не делаетвыглядит неправильно (этовсе закодировано), но имя параметра __RequestVerificationToken есть, и значение токена также присутствует.
Я очень смущен всем этим в данный момент и не могу найти правильный способ отправить токен, чтобы мое MVC-действие вызывалось. Если я удалюValidateAntiForgeryToken
приписывать и иметьJSON.stringify(myPage.contextsArrays);
В качестве данных JSON выглядит правильно (без кодировки), и он отображается нормально.
Как правильно выложить этот токен без формы?