Страница, которую я создаю, сильно зависит от AJAX.По сути, есть только одна «страница», и каждая передача данных обрабатывается через AJAX.Поскольку чрезмерное оптимистическое кэширование на стороне браузера приводит к странным проблемам (данные не перезагружаются), я должен выполнить все запросы (также считывает) с помощью POST - что вызывает перезагрузку.
Теперь я хочу предотвратить защиту страницы от CSRF,С отправкой формы, использование Html.AntiForgeryToken()
работает аккуратно, но в AJAX-запросе, я думаю, мне придется добавлять токен вручную?Есть ли что-нибудь из коробки доступное?
Моя текущая попытка выглядит следующим образом :
Я бы с удовольствием использовал существующую магию.Тем не менее, HtmlHelper.GetAntiForgeryTokenAndSetCookie
является приватным, и я не хочу взламывать MVC.Другой вариант - написать расширение типа
public static string PlainAntiForgeryToken(this HtmlHelper helper)
{
// extract the actual field value from the hidden input
return helper.AntiForgeryToken().DoSomeHackyStringActions();
}
, которое несколько взломано и оставляет большую проблему нерешенной: как проверить этот токен?Реализация проверки по умолчанию является внутренней и жестко запрограммирована на использование полей формы.Я попытался написать слегка измененный ValidateAntiForgeryTokenAttribute
, но он использует AntiForgeryDataSerializer
, который является частным, и я действительно не хотел копировать это тоже.
На данный момент, кажется, легче прийтис домашним решением, но это действительно дублирующий код.
Есть предложения, как сделать это умным способом?Я что-то упускаю совершенно очевидное?