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

ASP.NET Core设置ResponseCache后Cache-Control仍为no-cache,no-store如何解决

ASP.NET Core ResponseCache特性不生效问题原因及解决方案

常见原因

  • 未正确注册响应缓存服务,或响应缓存中间件顺序配置错误
  • 页面/控制器添加了[Authorize]授权特性,默认场景下授权端点不会启用缓存,框架会自动添加no-cache、no-store头
  • 浏览器开发者工具开启了「禁用缓存」选项,强制请求不使用缓存
  • 开发环境下的调试配置覆盖了缓存头配置
  • 存在全局过滤器或其他中间件手动修改了Cache-Control响应头

解决方案

1. 正确配置缓存服务和中间件

在Program.cs(.NET 6+版本)中按照正确顺序注册服务并添加中间件,示例如下:

var builder = WebApplication.CreateBuilder(args);

// 注册响应缓存服务
builder.Services.AddResponseCaching();
// 若需为授权接口/页面启用缓存,可添加如下配置
// builder.Services.AddResponseCaching(options =>
// {
//     options.AllowAuthorizedEndpoints = true;
// });

builder.Services.AddRazorPages();

var app = builder.Build();

// 其他基础中间件配置省略
app.UseStaticFiles();
app.UseRouting();

// 响应缓存中间件必须放在UseRouting之后,UseAuthorization之前
app.UseResponseCaching();

app.UseAuthorization();
app.MapRazorPages();
app.Run();

2. 调整ResponseCache特性配置

显式指定缓存规则,避免默认配置覆盖,若页面无需授权可添加[AllowAnonymous]特性:

[ResponseCache(Duration = 300, Location = ResponseCacheLocation.Client, NoStore = false)]
[AllowAnonymous]
public class HomeModel : PageModel
{
    public const string PageName = "Home";
    public void OnGet()
    {
    }
}

3. 校验测试环境配置

  • 关闭浏览器开发者工具的「禁用缓存」开关,使用无痕窗口测试
  • 可以先在生产环境配置下测试,避免开发环境调试逻辑的干扰
  • 检查是否存在全局过滤器、父类逻辑或其他中间件手动修改Cache-Control响应头的代码,如有则删除对应逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:39:03