Страницы

Поиск по вопросам

среда, 16 января 2019 г.

Проверить AntiForgeryToken в ajax-запросе?

Изучаю особенности asp.net core 2.0 на небольших приложениях. Хочу например сделать небольшой ajax-запрос к списку контактов.
Вот есть у меня моделька
public class ContactSearchViewModel { public string Needle { get; set; } }
и формочка:



function getSummary(needle) { $.ajax({ type: "POST", url: '/Contact/Search/', data: "Needle=" + needle, success: function (data) { $('#results').html(data); } }); }
И всё прекрасно работает... есть только одна маленькая досада: мне пришлось закомментировать ValidateAntiForgeryToken:
[HttpPost] //[ValidateAntiForgeryToken] public async Task Search(ContactSearchViewModel model) { var contacts = await this.ContactService.SearchAsync(model.Needle); return View(contacts); }
Если строку раскомментировать - то запросы до action не доходят (брейкпойнт не срабатывает), заворачиваются с 400 Bad Request где-то раньше в недрах вебсервера.
Вопрос простой: как правильно создавать ajax-запросы в .core чтобы они проходили валидацию?


Ответ

Согласно документации в представлении нужно добавить метод получения токена и скрытое поле:
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf @functions { public string GetAntiXsrfRequestToken() { return Xsrf.GetAndStoreTokens(Context).RequestToken; } }

и добавить в запрос заголовок с полученным токеном:
$.ajax({ ... headers: { "RequestVerificationToken": $('#RequestVerificationToken').val() }, ... });

Комментариев нет:

Отправить комментарий