Почему мой кеш приложения не использует OutputCache

Я не могу объяснить, почему мое приложение не кэширует первую страницу.

Я поставил дату на странице: @DateTime.Now

Вот действие домашнего контроллера

[OutputCache(Duration = 60)]
public ActionResult Index()
{
    return View();
}

Однако кеширование не работает, и на главной странице постоянно меняется дата.

Я попытался уменьшить титульную страницу и связанные с ней макеты до минимума, чтобы штамп был только DateTime.Now.

Я проверил все базовые контроллеры на наличие кода отключения кеширования.

Также проверил global.asax

Проверил web.config на предмет какой-либо конфигурации кеширования - нет.

Осмотрел со скрипачом. Вот заголовок ответа.

HTTP/1.1 200 OK
Cache-Control: public, no-cache="Set-Cookie", max-age=60
Content-Type: text/html; charset=utf-8
Expires: Wed, 04 Mar 2015 05:20:45 GMT
Last-Modified: Wed, 04 Mar 2015 05:19:45 GMT
Vary: *

Я также пробовал разные браузеры, в которых не было изменено никаких настроек локального кеширования.

Также пробовали развернуть приложение на сценическом сервере, чтобы оно не запускалось на моей машине разработчика.

Попробовали создать новое приложение asp.net mvc. Это сработало. В некоторой степени полезно, по крайней мере, сказать мне, что технология работает.

В чем может быть проблема?


person Valamas    schedule 04.03.2015    source источник
comment
Я не уверен, поможет ли это вам, но если ваша главная страница использует атрибут [Authorize] (он может быть зарегистрирован как глобальный фильтр), атрибут [Authorize] отключит кеширование вывода.   -  person NightOwl888    schedule 04.03.2015
comment
ты, хороший отзыв. Не использовать авторизацию и проверять наличие каких-либо других атрибутов при наследовании контроллера.   -  person Valamas    schedule 04.03.2015
comment
Использование браузером кэширования text/html таким образом, что он даже не будет повторно запрашивать его с сервера, вряд ли будет работать в большинстве современных браузеров. Если вы хотите, чтобы ваша отметка времени не менялась в течение 60 секунд, сохраните кэшированную копию на сервере: [OutputCache(Duration = 60, Location = OutputCacheLocation.Server)].   -  person haim770    schedule 12.03.2015


Ответы (1)


Пара вещей, которые нужно проверить:

  1. Если это в вашей производственной среде, проверьте, включено ли кэширование вывода в IIS. См. эту страницу.

  2. Попробуйте изменить расположение кеша, чтобы сузить круг проблем:

e.g.

[OutputCache(Duration = 60, Location = OutputCacheLocation.Server)]
[OutputCache(Duration = 60, Location = OutputCacheLocation.Client)]
  1. Проверьте свой web.config на наличие записей [caching], которые могут переопределить поведение по умолчанию.
person Nick    schedule 12.03.2015
comment
привет Ник, спасибо за предложения. Думаю, я нашел проблему, но пока не знаю, почему, и отправлю ответ, когда найду. В двух словах, действие Homt.Index переопределяет действие базового контроллера. Обычное действие Home.Contact - это кеширование. - person Valamas; 17.03.2015
comment
Я установил кэширование пончиков, и теперь моя проблема решена. - person Valamas; 17.03.2015