迁移至IIS 10后CSHTML修改未生效,清理缓存仍无法解决
问题排查思路:ASP.NET MVC 部署IIS10后特定路由缓存无法清除
核心问题总结
将ASP.NET Framework MVC应用从IIS7.5(Windows Server 2012)迁移到IIS10.0(Windows Server 2019)后,/cms/about路由始终返回旧内容:
- 修改
/Views/Cms/About.cshtml的href属性无效果,即使删除该文件仍返回旧页面 - 修改
CmsController的About方法后,该路由未执行新代码,但同控制器下/cms/foo、/cms/bar路由正常更新 - 常规缓存清理手段均无效
针对性排查建议
1. 路由规则冲突排查
由于存在/Views/Home/About.cshtml文件,需确认是否有路由规则导致/cms/about被错误映射:
- 打开
RouteConfig.cs,检查cms相关路由的优先级是否高于默认路由 - 临时修改
HomeController的About方法,添加唯一标识输出,验证/cms/about是否误调用了该方法
2. IIS URL重写模块缓存检查
IIS10的URL重写模块可能存在内置缓存:
- 进入IIS管理器的站点URL重写模块
- 点击右侧「查看服务器变量」,确认是否存在针对
/cms/about的缓存规则 - 临时禁用所有URL重写规则,测试
/cms/about是否正常更新
3. ASP.NET MVC视图引擎缓存强制刷新
在应用启动时强制清除视图引擎缓存:
- 在
Global.asax.cs的Application_Start方法末尾添加代码:var viewEngine = ViewEngines.Engines.OfType<RazorViewEngine>().FirstOrDefault(); if (viewEngine != null) { viewEngine.ViewLocationCache.Clear(); } - 重新部署应用并回收应用池
4. IIS输出缓存深层配置检查
常规禁用输出缓存可能未覆盖特定路由:
- 打开站点的「输出缓存」功能,针对
/cms/about路径创建缓存规则并设置为「禁止缓存」 - 检查服务器级别的输出缓存配置,确认是否存在全局规则影响该路由
5. 磁盘文件系统缓存检查
Windows Server 2019的NTFS缓存可能导致IIS读取旧文件:
- 打开命令提示符,执行以下命令刷新文件系统缓存:
fsutil behavior set disablelastaccess 1 fsutil behavior set disable8dot3 1 - 重启服务器后测试
6. 应用预编译配置检查
确认应用是否为预编译部署:
- 检查发布配置,若启用「预编译站点」,需勾选「允许更新预编译站点」
- 若为完全预编译,修改CSHTML后需重新预编译并发布
额外验证步骤
- 临时给
CmsController的About方法添加路由特性[Route("cms/about-new")],测试新路由是否返回新内容,验证控制器逻辑本身无问题 - 检查站点
web.config中的caching节点,确认是否存在针对MVC视图的自定义缓存设置
内容的提问来源于stack exchange,提问作者Matt Crow
相关产品推荐
相关产品推荐

