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

.NET 7 Output Cache在IIS中失效,本地/Docker正常,求IIS配置方案

IIS服务器配置要点(解决.NET 7 Output Cache失效问题)

1. 禁用IIS原生输出缓存,避免冲突

IIS自带的输出缓存会干扰ASP.NET Core的Output Cache逻辑,需要关闭:

  • 打开IIS管理器,定位到目标站点,进入输出缓存功能
  • 点击「添加」,文件扩展名填*,取消勾选「启用缓存」后确定
  • 或者直接在站点根目录的web.config中添加配置:
    <system.webServer>
      <caching enabled="false" />
    </system.webServer>
    

2. 确保缓存响应头被正确传递

IIS可能会修改或覆盖ASP.NET Core生成的缓存相关响应头,需在web.config中添加配置:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <remove name="Cache-Control" />
      <remove name="Expires" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

此配置会移除IIS默认添加的缓存头,保证ASP.NET Core Output Cache生成的头信息生效。

3. 检查URL重写规则

若站点使用URL重写,需确保规则不会清除缓存头或修改请求路径导致缓存键失效:

  • 进入IIS的URL重写功能,逐一检查规则,避免添加no-cache类的响应头操作
  • 必要时为API路径(如/api/*)添加规则条件,保留缓存相关头信息

4. 验证应用程序池设置

  • 确认应用程序池的**.NET CLR版本**设置为「无托管代码」(ASP.NET Core为自托管模式,IIS仅作反向代理)
  • 检查应用程序池的身份权限,确保其能正常读取站点文件,避免权限问题导致缓存逻辑异常

5. 隔离静态内容缓存规则

进入IIS的静态内容功能,针对API动态请求路径(如/api/*)单独配置,避免静态文件的缓存规则干扰接口的Output Cache

代码层面额外确认

虽然你的代码在本地和Docker环境正常,仍需检查:

  • 确保app.UseOutputCache()的中间件顺序正确:在app.UseRouting()之后、app.UseAuthorization()之前
  • 确认自定义缓存策略中没有针对IIS环境的错误判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:50:26