You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 2.0使用ResponseCache报错的问题求助

解决ASP.NET Core 2.0 ResponseCaching的InvalidOperationException问题及实现旧版OutputCache效果

首先,咱们来拆解你遇到的错误:InvalidOperationException: Cannot resolve scoped service 'Microsoft.AspNetCore.ResponseCaching.Internal.IResponseCachingPolicyProvider' from root provider。这个问题的根源是你手动注册了IResponseCachingPolicyProvider为Scoped服务,但ResponseCaching中间件是在根服务提供者(非作用域)中尝试解析它,而根容器无法直接解析Scoped生命周期的服务,这就导致了报错。

正确的ResponseCaching配置步骤

你不需要手动绑定IResponseCachingPolicyProvider,ASP.NET Core已经提供了官方的注册方法来处理所有相关服务的生命周期:

  1. 修正Startup.cs中的服务注册
    删掉你添加的services.AddScoped<IResponseCachingPolicyProvider, ResponseCachingPolicyProvider>();,替换成官方的ResponseCaching服务注册:

    public void ConfigureServices(IServiceCollection services)
    {
        // 注册ResponseCaching所需的所有服务(包括正确的生命周期配置)
        services.AddResponseCaching();
        services.AddMvc();
    }
    
  2. 中间件顺序保持不变
    你的中间件配置是对的,UseResponseCaching必须在UseMvc之前,这样才能拦截并处理响应缓存逻辑:

    public void Configure(IApplicationBuilder application)
    {
        application
            .UseResponseCaching()
            .UseMvc();
    }
    

实现旧版[OutputCache(NoStore = true, Duration = 0)]的效果

旧版的这个特性是告诉客户端和服务器都不要缓存响应,在ASP.NET Core中对应的配置是:

[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
public IActionResult YourAction()
{
    // 你的业务逻辑
    return View();
}
  • Location = ResponseCacheLocation.None:会向客户端发送Cache-Control: no-store, no-cache等响应头,禁止客户端缓存
  • NoStore = true:确保服务器本身也不会存储这个响应的缓存

这样配置后,就完全等价于旧版ASP.NET中[OutputCache(NoStore = true, Duration = 0)]的效果了。

内容的提问来源于stack exchange,提问作者Green_qaue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:37:41