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

.NET Core 3.0升级后控制器无法返回HTML视图问题求助

.NET Core 3.0升级后无法返回HTML视图的原因及解决办法

这个问题我之前帮不少开发者排查过,核心原因是.NET Core 3.0对视图引擎的文件识别规则做了破坏性变更:

在.NET Core 2.2及更早版本中,视图引擎允许匹配.html这类非Razor后缀的文件,所以你直接调用View("Views/test.html")能正常找到并返回视图。但从.NET Core 3.0开始,默认的Razor视图引擎只默认识别.cshtml扩展名的文件,不再自动处理.html格式的文件,这就是你遇到“找不到文件”错误的根源。

下面给你几个可行的解决办法:

  • 重命名文件为.cshtml(最简单)
    直接把test.html改成test.cshtml,Razor视图引擎就能正常识别它了。调用时可以简化为View("test")(引擎会自动在Views目录下查找),或者保留完整路径View("Views/test.cshtml")。

  • 配置视图引擎支持.html扩展名
    如果你不想修改文件名,可以在Startup.cs的ConfigureServices方法中,自定义视图位置格式,让引擎同时识别.html文件:

    services.AddControllersWithViews()
        .AddRazorOptions(options =>
        {
            // 添加.html视图文件的查找路径格式
            options.ViewLocationFormats.Add("/Views/{0}.html");
            // 如果你的项目有区域(Areas),可以补充对应的格式
            // options.ViewLocationFormats.Add("/Areas/{2}/Views/{1}/{0}.html");
        });
    

    配置完成后,原来的View("Views/test.html")调用就能正常工作,引擎会同时查找.cshtml和.html文件。

  • 直接返回静态HTML内容(适合纯静态页面)
    如果这个.html文件只是无逻辑的静态内容,你也可以跳过视图引擎,直接读取文件内容返回:

    private readonly IWebHostEnvironment _webHostEnvironment;
    
    // 通过构造函数注入IWebHostEnvironment
    public YourController(IWebHostEnvironment webHostEnvironment)
    {
        _webHostEnvironment = webHostEnvironment;
    }
    
    public IActionResult Test()
    {
        var htmlPath = Path.Combine(_webHostEnvironment.WebRootPath, "test.html");
        var htmlContent = System.IO.File.ReadAllText(htmlPath);
        return Content(htmlContent, "text/html");
    }
    

    注意这种方式不支持视图布局、模型绑定等Razor特性,仅适合纯静态HTML场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:34:02