Я просто хочу отметить, что если кто-то хочет запретить кэширование ТОЛЬКО динамического контента, добавление этих дополнительных заголовков должно производиться программно.
Я отредактировал файл конфигурации моего проекта, добавив заголовки без кэширования, но это также отключило кэширование статического содержимого, что обычно нежелательно.
Изменение заголовков ответов в коде гарантирует, что изображения и файлы стилей будут кэшироваться.
Это совершенно очевидно, но все же стоит упомянуть.
И еще одно предупреждение. Будьте осторожны, используя метод ClearHeaders из класса HttpResponse. Это может привести к ушибам, если вы будете использовать это безрассудно. Как будто это дало мне.
После перенаправления на событие ActionFilterAttribute последствия очистки всех заголовков теряют все данные сеанса и данные в хранилище TempData. Во время перенаправления безопаснее перенаправлять из действия или не очищать заголовки.
Если подумать, я не рекомендую всем использовать метод ClearHeaders. Заголовки лучше убирать отдельно. И чтобы правильно установить заголовок Cache-Control, я использую этот код:
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.AppendCacheExtension("no-store, must-revalidate");