В приложении ASP.NET Core у меня есть метод действий, который возвращает некоторые данные. Я хотел кэшировать эти данные на стороне клиента. Поэтому на основе документации здесь я могу использовать атрибут ResponseCache
для метода действия. Этот атрибут добавляет заголовок Cache-Control
в ответ
Кэширование ответов относится к заданию заголовков, связанных с кешем, по HTTP ответы, сделанные действиями ASP.NET Core MVC. В этих заголовках указано, как вы хотите, чтобы клиентские и промежуточные (прокси) машины кэшировали ответы на определенные запросы (если вообще). Это может уменьшить количество запрашивает клиент или прокси-сервер для веб-сервера, поскольку в будущем запросы на одно и то же действие могут быть отправлены от клиента или прокси Кэш.
также
Кэширование ответов не кэширует ответы на веб-сервере. Это отличается от кэширования вывода, которое будет кэшировать ответы в памяти на сервер в более ранних версиях ASP.NET и ASP.NET MVC.
Так вот как выглядит мой метод действий
public class LookupController : Controller
{
[HttpGet]
[ResponseCache(Duration = 120)]
public IEnumerable<StateProvinceLookupModel> GetStateProvinces()
{
return _domain.GetStateProvinces();
}
}
Затем я вызываю метод с использованием браузера как http://localhost:40004/lookup/getstateprovinces Вот заголовки запроса и ответа
Обратите внимание, что заголовки ответов имеют Cache-Control: public,max-age-120
, как ожидалось.
Однако, если обновить страницу с использованием F5 (до 120 секунд), то точка останова отладчика внутри метода действия GetStateProvince всегда будет хитом. Это означает, что он не передает данные на стороне клиента.
Есть ли что-то еще, что мне нужно сделать, чтобы включить кеширование на стороне клиента?
Обновление Я пробовал использовать IE, Chrome и POSTMAN без везения. Каждый раз, когда я набираю URL-адрес в адресной строке или удаляю обновление, клиент (то есть браузер или почтальон) делает метод вызова к действию.