Страницы

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

пятница, 3 января 2020 г.

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

#c_sharp #aspnet_core


Изучаю особенности 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 чтобы они проходили валидацию?


Ответы

Ответ 1



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

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

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