【问题标题】:Programmatically clear cache profile in asp.net core以编程方式清除 asp.net 核心中的缓存配置文件
【发布时间】:2018-04-03 18:53:56
【问题描述】:

我在我的 asp.net core web api 中设置了一个缓存配置文件,如下所示:

services.AddMvc(options => {
     // Cache profile for lookup data will expire every 15 minutes.
     options.CacheProfiles.Add("LookupData", new CacheProfile() { Duration = 15 });    
});

我在“lookupsController”顶部使用了这个属性,因为每个方法返回的信息列表不会定期更改(尽管缓存每 15 分钟自动过期)。

[ResponseCache(CacheProfileName = "LookupData")]
[Produces("application/json")]
[Route("api/Lookups")]
public class LookupsController : Controller
{
    ...
}

我有另一个管理控制器,它可以允许用户在查找控制器列表中添加和删除项目,这种情况不会经常发生,但是当它发生时,我想以编程方式强制重置缓存配置文件并强制后续 Web 请求获取最新的,而不是保留现在过时的缓存数据列表。

如何以编程方式实现缓存的重置? - 然后我可以将此代码添加到我的管理控制器方法中,以强制重置缓存。以前有人必须这样做吗?

【问题讨论】:

    标签: c# asp.net caching asp.net-core responsecache


    【解决方案1】:

    您无法真正清除该缓存,因为它不是服务器缓存而是客户端缓存。 ResponseCache 属性只会设置某些标题作为响应。对其工作原理的简化描述:向您的 api 发出请求的浏览器(或任何中间代理)注意到那些响应标头,看到此响应在 15 分钟内有效,因此在接下来的 15 分钟内不会重复该请求,而是从它的本地缓存。由于您无法控制该本地缓存 - 您无法清除它。

    【讨论】:

    • 非常感谢@Evk 提供的信息,当您声明它时,它是有意义的 - 我希望有某种响应标头我可以强制任何使用该策略强制客户端刷新但没有的方法听起来不像。我可能需要通过减少缓存超时来缓解这个问题。
    • @RobMcCabe 以及响应标头无论如何都无济于事,因为客户端(例如浏览器)在缓存时间到期之前不会再调用您的 api,因此无法评估任何标头。
    • 感谢 Evk 的信息!
    • 对现有用户可能没有意义,但为新用户清除并重新生成缓存以便他们能够更快地获取新数据是有意义的。
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多