ASP.NET MVC AntiForgeryToken и кеширование
В настоящее время я работаю над проектом ASP.NET MVC и столкнулся с ошибкой, которая казалась странной.
В формах ASP.NET MVC Templates всегда есть AntiForgeryToken (таким образом, я полагаю, что это лучшая практика). Однако AntiForgeryTokens, похоже, плохо работают с кэшированием.
Например, когда я открываю сайт с формой, содержащей AntiForgeryToken, и дублирую окно браузера, оба окна имеют одинаковый AntiForgeryToken, что приводит к исключению при публикации формы. Эта проблема не существует, когда кэширование отключено (через ActionFilter NoCache см. Отключение кэширования браузера для всего веб-сайта ASP.NET).
Поэтому я думаю, что мой вопрос: это должно быть так? Есть ли другой способ, кроме отключения кеша для решения проблемы?
Особенно меня удивляет тот факт, что шаблоны ASP.NET MVC по умолчанию содержат AntiForgeryTokens, но не отключают кэш (и поэтому открыты для ошибки, описанной выше).
Заранее спасибо!
1 ответ
Это ожидаемое поведение. Кэширование хорошо кэширует ответ, включая значение AntiForgeryToken. Отключите кэширование на формах, и в частности на страницах, которые используют AntiForgeryToken. Если вы подумаете об этом дальше, если вы в приложении для ввода данных, хотите ли вы кэшировать свои формы ввода данных? Возможно нет. Однако вы хотите кэшировать тяжелые отчеты - даже если это просто микро-кэширование - секунду или две.