Использование outputcache в MVC

У меня есть действие, объявленное следующим

[Route("{language}/Navigation/Test")]
[OutputCache(Duration = 3600, VaryByParam = "none")]
public ActionResult Test()
{
   return View();
}

Чтобы проверить настройку кеша вывода, я добавил @DateTime.Now.Ticks.ToString() ввиду Test.cstml

Что меня беспокоит, так это то, что когда я запускаю http://localhost/EN/Navigation/Test первый раз, представление кэшируется, а обновление страницы возвращает то же количество тиков. Теперь, если я поменяю язык и установлю http://localhost/DE/Navigation/Test, число тиковых изменений, т.е. просмотр не подается из кеша.

Я пытался удалить VaryByParam = "none", но всегда дает одинаковые результаты.

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

1 ответ

Решение

VaryByParam зависит от параметров, переданных в URL. Т.е. URL www.stackru.com/page?param1 = 5. Так как DE это другой URL для EN, страница не будет найдена в кеше, поэтому она запрашивает новую.

Из MSDN

Список строк через точку с запятой, используемый для изменения выходного кэша. По умолчанию эти строки соответствуют значению строки запроса, отправляемому с атрибутами метода GET, или параметру, отправляемому с помощью метода POST. Если для этого атрибута задано несколько параметров, кэш вывода содержит разные версии запрашиваемого документа для каждого указанного параметра. Возможные значения включают none, * и любую допустимую строку запроса или имя параметра POST.

Итог: он основан на URL, а не на маршрутизации. Вы можете настроить на основе строки запроса, но не более.

Другие вопросы по тегам