Использование 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, а не на маршрутизации. Вы можете настроить на основе строки запроса, но не более.