.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
相关产品推荐
相关产品推荐

