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

ASP.NET Core中View转String渲染器的缓存问题求助

解决ASP.NET Core ViewRender组件视图修改后需重启应用的缓存问题

我之前也踩过一模一样的坑——自己实现了那个无需控制器就能把视图渲染成HTML的ViewRender组件,结果每次改完视图都得重启应用才能看到更新,查了半天才发现是Razor的视图缓存机制在搞鬼。

原代码的注释其实已经给了明确方向:把原来用的_razorViewEngine.FindView方法换成_razorViewEngine.GetView就能解决这个问题,我来给你具体拆解下怎么改:

问题根源

原来的渲染逻辑里,大概率是用FindView来查找视图的:

var viewResult = _razorViewEngine.FindView(actionContext, viewName, false);

这个方法会依赖Razor的视图查找缓存,一旦视图被加载过,后续请求都会直接复用缓存里的版本,哪怕你修改了视图文件也不会重新读取。

解决方案:切换到GetView方法

GetView方法可以直接指定视图的绝对路径,绕过视图查找缓存,每次都会读取最新的视图文件内容。修改后的核心代码大概是这样:

// 注意这里要传入视图的绝对路径,比如"/Views/EmailTemplate/Welcome.cshtml"
var viewResult = _razorViewEngine.GetView(null, "/Views/EmailTemplate/Welcome.cshtml", false);

// 别忘了判断视图是否存在,避免报错
if (!viewResult.Success)
{
    throw new InvalidOperationException($"找不到目标视图: /Views/EmailTemplate/Welcome.cshtml");
}

这里解释下参数:

  • 第一个参数传null即可,代表当前执行路径
  • 第二个参数是视图的绝对路径(从项目根目录开始的完整路径)
  • 第三个参数false表示这不是主布局视图

优化:区分开发/生产环境

当然,生产环境我们还是希望利用缓存提升性能的,所以可以结合环境变量做个判断,只在开发环境用GetView,生产环境继续用FindView:

// 先通过构造函数注入环境变量对象
private readonly IRazorViewEngine _razorViewEngine;
private readonly IWebHostEnvironment _env;

public ViewRenderService(IRazorViewEngine razorViewEngine, IWebHostEnvironment env)
{
    _razorViewEngine = razorViewEngine;
    _env = env;
}

// 渲染方法里的视图获取逻辑
IView view;
if (_env.IsDevelopment())
{
    // 开发环境:用GetView读取最新视图
    var viewPath = $"/Views/{viewName}.cshtml"; // 根据你的视图路径规则调整
    var getViewResult = _razorViewEngine.GetView(null, viewPath, false);
    if (!getViewResult.Success)
    {
        throw new InvalidOperationException($"开发环境下找不到视图: {viewPath}");
    }
    view = getViewResult.View;
}
else
{
    // 生产环境:用FindView利用缓存提升性能
    var findViewResult = _razorViewEngine.FindView(actionContext, viewName, false);
    if (!findViewResult.Success)
    {
        throw new InvalidOperationException($"生产环境下找不到视图: {viewName}");
    }
    view = findViewResult.View;
}

这样改完之后,开发环境下修改视图后,直接刷新就能看到最新效果,不用再反复重启应用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:39:38