как мне кэшировать вывод в ASP. NET Core - PullRequest
0 голосов
/ 09 января 2020

У меня есть контроллер API, и сценарий таков: мне нужно использовать сторонний источник данных (скажем, третья сторона для простоты предоставлена ​​в виде файла dll, а dll содержит Student модель и StudentDataSource, которые содержат много методов для извлечения ученика), и вызов стороннего источника данных является дорогостоящим, и данные обновляются только каждые 6 часов. так что каким-то образом мне нужно кэшировать вывод, ниже приведен некоторый метод действия от моего контроллера API:

// api controller that contain action methods below

[HttpGet]
public JsonResult GetAllStudentRecords()
{
   var dataSource = new StudentDataSource();  
   return Json(dataSource.GetAllStudents());
}

[HttpGet("{id}")]
public JsonResult GetStudent(int id)
{
   var dataSource = new StudentDataSource();
   return Json(dataSource.getStudent(id));
}

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

1 Ответ

0 голосов
/ 09 января 2020

Моя команда реализует аналогичную стратегию кэширования на контроллере API, используя настраиваемый атрибут фильтра действий для обработки логики кэширования c. См. здесь для получения дополнительной информации о фильтрах действий.

Метод OnActionExecuting фильтра действий выполняется до вашего метода контроллера, поэтому вы можете проверить, кэшируются ли искомые данные, которые вы ищете. и вернуть его прямо отсюда, минуя вызов к стороннему источнику данных, когда существуют кэшированные данные. Мы также используем этот метод для проверки типа запроса и сброса кэша при обновлении и удалении, но похоже, что вы не будете изменять данные.

Метод OnActionExecuted фильтра действия запускается сразу ПОСЛЕ вашего контроллера метод logi c, дающий вам возможность кэшировать объект ответа перед его возвратом клиенту.

Сложнее дать ответ о том, как реализовать фактическое кэширование, но Microsoft предоставляет некоторые варианты для кэширования в памяти. NET Core (см. MemoryCache.Default недоступно в. NET Core? )

...