.NET 4.5 OutputCache迁移至.NET 8.0 实现服务端缓存配置
.NET 8 等效替换 .NET 4.5 OutputCache 服务端缓存配置
要在.NET 8中实现和旧版.NET 4.5完全等效的服务端缓存,需要分两步配置:先注册自定义缓存策略,再在控制器方法上引用该策略。
1. 在Program.cs中配置OutputCache服务与策略
首先添加OutputCache服务,并定义一个仅在服务端生效的缓存策略,对应你需要的所有参数:
builder.Services.AddOutputCache(options => { options.AddPolicy("ServerSideCache", policy => { // 缓存有效期1分钟,对应旧版Duration=60 policy.Expire(TimeSpan.FromMinutes(1)); // 按所有查询参数区分缓存,对应旧版VaryByParam="*" policy.SetVaryByQueryKeys("*"); // 不允许缓存存储到客户端,对应旧版NoStore=true policy.NoStore(); // 明确指定缓存仅存储在服务端,对应旧版Location=Server policy.CacheLocation(OutputCacheLocation.Server); }); }); // 启用OutputCache中间件(需放在路由配置之前) app.UseOutputCache();
2. 在控制器方法上应用策略
直接在目标Action上使用[OutputCache]属性,指定我们定义的策略名即可:
[OutputCache(PolicyName = "ServerSideCache")] public IActionResult MyController(...) { // 你的业务逻辑代码 }
为什么你之前的尝试无效?
你直接使用[OutputCache(Duration = 60, NoStore = true, VaryByQueryKeys = ["*"])]时,实际上是在使用.NET 8的默认缓存策略,而默认策略并不强制限定缓存位置为服务端,可能导致缓存逻辑不符合预期。必须通过自定义策略明确指定CacheLocation(OutputCacheLocation.Server),才能确保缓存仅存储在服务端,实现你需要的“用已有缓存响应多设备请求、避免下游重复调用”的需求。
内容的提问来源于stack exchange,提问作者Espen
相关产品推荐
相关产品推荐

