Хранение данных с апи( C#, .net)
Получаю данные с апи, получение этих данных занимает некоторое время и я бы хотел, чтобы у меня не делался постоянно запрос на получение этих данных.
Вопрос - как лучше хранить объект? С помощью сессий, кеш или есть еще способы не обращаться каждый раз к апи? Спасибо заранее!
Далее идет некоторый код(и мое тупое решение проблемы)
Метод контроллера
public async Task<IActionResult> ScorersSeriaA()
{
if (HttpContext.Session.Keys.Contains("Loaded")) // если есть ключ возвращаю объект с данными
return View("Scorers", _topScorers.Players);
_topScorers.Players = await _topScorers.GetTopScorers(WC.URL_SA,Leagues.SeriaA);
HttpContext.Session.SetString("Loaded", "True"); // устанавливаю ключ в сессии
return View("Scorers", _topScorers.Players);
}
Метод сервиса - тут осуществляется запрос к апи и выполняются дополнительные методы.
public class TopScorers : ITopScorers
{
CancellationTokenSource CancellationTokenSource { get; } = new CancellationTokenSource();
public List<Datum> Players { get; set; }
public async Task<List<Datum>> GetTopScorers(string url,Leagues footballLeague)
{
var client = new RestClient(url);
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Accept", "application/json");
request.RequestFormat = DataFormat.Json;
IRestResponse response = await client.ExecuteAsync(request, CancellationTokenSource.Token);
var content = response.Content;
var root = JsonConvert.DeserializeObject<Root>(content);
switch (footballLeague)
{
case Leagues.EPL:
Players = await GetPicturesEPLPlayers(root.data);
break;
case Leagues.SeriaA:
Players = await GetPicturesSeriaAPlayers(root.data);
break;
default:
break;
}
return Players;
}
}