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

IIS站点恢复.cshtml布局页后仍报找不到路径500错误

根因说明

该问题并非IIS层缓存或配置导致,本质是ASP.NET MVC Razor视图引擎的视图查找缓存,与文件变更通知(FCN)机制存在竞态缺陷:

  • 当/Views/下的布局页被删除、重命名时,Razor引擎处理请求时会立刻触发视图路径查找,查找失败的结果会被写入内存中的视图路径缓存,该缓存为滑动过期策略,有效期内不会重新扫描磁盘文件。
  • 你当前配置的fcnMode="Single"为全局单对象监听文件变更模式,理论上文件恢复时FCN会触发缓存清空,但该模式下存在已知逻辑问题:如果站点持续收到请求,每次请求命中"找不到视图"的错误时,都会自动续期失败结果的缓存条目,导致FCN的缓存清空逻辑始终无法生效,错误状态被永久锁定。
  • 静置站点可自动恢复的原因是没有新请求续期缓存,等缓存默认滑动过期周期(约15分钟)结束后,下一次请求会重新扫描磁盘,即可识别到恢复后的布局页。
解决方案

按优先级从高到低操作即可:

  • 临时快速恢复:直接回收对应站点的IIS应用程序池,会清空所有进程内内存缓存,站点可立刻恢复正常,无需重启整个IIS服务。
  • 永久修复(推荐):修改站点根目录web.config,在<appSettings>节点下添加配置,关闭Razor引擎对视图查找失败结果的缓存:
    <add key="webpages:EnableViewNotFoundCache" value="false" />
    
    该配置对Umbraco 7、原生MVC 4/5均生效,不会影响正常视图的渲染性能,仅会在视图查找失败时跳过缓存逻辑。
  • 兼容老版本方案:如果当前MVC版本过低不支持上述配置键,可将httpRuntime节点下的fcnMode属性从Single改为Default。默认模式下会对每个目录单独注册文件变更监听,通知响应更及时,可避免缓存续期的竞态问题。
  • 开发环境方案:开发调试场景下可将<compilation>节点的debug属性设为true,该模式下Razor不会缓存任何视图查找结果,不会触发该问题,注意生产环境禁止开启debug模式。
验证说明

配置修改后可手动删除、恢复布局页验证:无论是否持续刷新请求,文件恢复后最多1-2次请求即可正常加载页面,不会再出现持续报错的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:30:46