ASP.NET MVC AntiForgeryToken и кэширование

В настоящее время я работаю над проектом ASP.NET MVC и натолкнулся на ошибку, которая показалась странной.

В шаблонах шаблонов ASP.NET MVC всегда появляется AntiForgeryToken (что заставляет меня думать, что это лучшая практика). Однако AntiForgeryTokens, похоже, не работает с кешированием.

Например, когда я открываю сайт с формой, включающей AntiForgeryToken, и я дублирую окно браузера, оба окна имеют тот же самый AntiForgeryToken, приводящий к исключению при отправке формы. Эта проблема не существует, когда кеширование отключено (через ActionFilter NoCache, см. Отключить кеш браузера для всего веб-сайта ASP.NET).

Итак, я думаю, мой вопрос: это должно быть так? Есть ли другой способ помимо отключения кэша для решения проблемы?

Особенно тот факт, что шаблоны ASP.NET MVC по умолчанию содержат AntiForgeryTokens, но не отключают кеш (и поэтому открыты для ошибки, описанной выше) заставляет меня задаться вопросом.

Спасибо заранее!

Ответ 1

Это ожидаемое поведение. Кэширование прекрасно кэширует ответ, в том числе значение AntiForgeryToken. Отключить кеширование в формах и, в частности, на страницах, которые используют AntiForgeryToken. Если вы думаете об этом дальше, если вы находитесь в приложении для ввода данных, вы хотите кэшировать свои формы ввода данных? Возможно нет. Однако вы хотите кэшировать тяжелые отчеты - даже если это просто микро-кэширование - второе или два.