Вот очень маленький образец страницы Razor:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<h1>
@DateTime.Now.ToString()
</h1>
//model
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
}
Если я использую этот код, время будет обновляться каждые 30 секунд, что и предполагалось:
<cache expires-after="TimeSpan.FromSeconds(30)">
<h1>
@DateTime.Now.ToString()
</h1>
</cache>
Однако, добавление атрибута ResponseCache
к модели этого не делает:
[ResponseCache(Duration = 30)]
public class IndexModel : PageModel
После некоторого исследования кажется, что атрибут только отправляет клиенту соответствующие заголовки, прося его кэшировать содержимое. Как я могу сохранить весь ответ в памяти, чтобы, когда пользователь запрашивает определенную страницу c, сервер просто отправляет кэшированный ответ и снова исключает процесс вычисления результата?
Кроме того, с помощью <cache>
tag helper, я не смог найти способ сделать запись в кэше недействительной. Таким образом, одним из сценариев для меня было бы кэшировать каждую страницу в памяти в течение 30 дней, и если я что-то изменю в панели администратора, я бы тогда сделал недействительным кеш для этого элемента c, чтобы следующий запрос выдал fre sh результат. Раньше я делал это на Asp. Net MVC 3+, но не мог найти никакого метода для достижения того же результата в Asp. Net Core 3.1