C# ASP.NET核心缓存X时间的外部web调用

C# ASP.NET核心缓存X时间的外部web调用,c#,asp.net,asp.net-web-api,asp.net-core,asp.net-web-api2,C#,Asp.net,Asp.net Web Api,Asp.net Core,Asp.net Web Api2,我有一个WebAPI方法,其中在action方法中我构建了一个模型,其中1个字段是从外部API构建的。但是,速度优化非常重要,我希望将单个请求缓存到外部API中一次X分钟。我正在尝试使用HttpClient和委托处理程序来实现它,但其他任何方法都是受欢迎的。对我来说,更好的解决方案是将WEB Api的结果缓存在内存缓存中 这里是我为分布式缓存所做的实现 private readonly IDistributedCache _cache; public Constr

我有一个WebAPI方法,其中在action方法中我构建了一个模型,其中1个字段是从外部API构建的。但是,速度优化非常重要,我希望将单个请求缓存到外部API中一次X分钟。我正在尝试使用HttpClient和委托处理程序来实现它,但其他任何方法都是受欢迎的。

对我来说,更好的解决方案是将WEB Api的结果缓存在内存缓存中

这里是我为分布式缓存所做的实现

    private readonly IDistributedCache _cache;
            public Constructor(IDistributedCache cache)
            {
                _cache = cache;
            }

     public async Task<MyModel> GetWebApiData(double? latitude, double? longitude)
        {    
               var key = $"MyKey";
                var cachedValue = await _cache.GetAsync(key);

                if (cachedValue == null)
                {
                    data = "CallWebApi"
                    await SetDataToCache(key, data);
                }
                else
                {
                    data = JsonConvert.DeserializeObject<MyModel>(Encoding.UTF8.GetString(cachedValue));
                }
}

    public async Task SetDataToCache(string key, MyModel data)
            {
                if (data != null)
                {
                    var json = JsonConvert.SerializeObject(data);
                    await _cache.SetAsync(key, Encoding.ASCII.GetBytes(json), new DistributedCacheEntryOptions()
                    {
                        AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
                    });
                }
            }
专用只读IDistributedCache\u缓存;
公共构造函数(IDistributedCache)
{
_缓存=缓存;
}
公共异步任务GetWebApiData(双纬度、双经度)
{    
var key=$“MyKey”;
var cachedValue=await\u cache.GetAsync(key);
if(cachedValue==null)
{
data=“CallWebApi”
等待SetDataToCache(键,数据);
}
其他的
{
data=JsonConvert.DeserializeObject(Encoding.UTF8.GetString(cachedValue));
}
}
公共异步任务SetDataToCache(字符串键,MyModel数据)
{
如果(数据!=null)
{
var json=JsonConvert.serialized对象(数据);
wait_cache.SetAsync(key,Encoding.ASCII.GetBytes(json),新的DistributedCacheEntryOptions()
{
AbsoluteExpirationRelativeToNow=时间跨度从分钟(10)
});
}
}