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

如何配置ASP.NET Core使API项目视图在自身项目中查找?

搞定API项目视图查找问题的几个实用方案

我明白你的痛点——API项目里明明写了控制器和视图,结果框架偏偏跑到主项目里找,完全忽略了API项目的文件。下面几个方案都是基于你现有的/Main/+/API/结构来的,不用大改文件位置,你可以根据自己的场景选:

方案1:全局配置视图查找优先级(适合多个HTML视图的场景)

如果API里有不止一个HTML视图要返回,直接在API项目的启动配置里给视图引擎加个优先查找路径,让框架先找API项目的Views目录,找不到再去主项目找。

在API项目的Program.cs(或者.NET 5及以前的Startup.cs)里,找到配置MVC服务的地方,加这段代码:

services.AddControllersWithViews()
    .AddRazorOptions(options =>
    {
        // 先找API项目下的控制器专属视图
        options.ViewLocationFormats.Add("/API/Views/{1}/{0}.cshtml");
        // 再找API项目下的共享视图
        options.ViewLocationFormats.Add("/API/Views/Shared/{0}.cshtml");
    });

这里的{1}对应控制器名称,{0}对应视图名称,配置完之后,API控制器的视图就会优先从/API/Views/[控制器名]/[视图名].cshtml里加载了。

方案2:直接指定视图完整路径(适合仅1%场景的轻量方案)

既然只有1%的场景需要返回HTML,那完全不用全局配置,直接在对应的Action里指定视图的完整路径就行,简单粗暴又有效。

比如你的API控制器里的Action可以这么写:

public IActionResult ReturnFullHtml()
{
    // 直接指向API项目里的视图文件路径
    return View("/API/Views/YourController/TargetView.cshtml");
}

这样框架就会精准定位到API项目的视图,不会再跑去主项目瞎找了。

方案3:嵌入式视图(适合API项目是类库且视图不常修改的场景)

如果你的API项目是类库形式,还可以把视图设为嵌入式资源,这样不用依赖文件路径,编译后直接嵌入到程序集里。

步骤很简单:

  1. 右键API项目里的所有视图文件,选择“属性”,把“生成操作”改成嵌入式资源
  2. 在API项目的启动配置里加这段代码,让框架能读取嵌入式视图:
services.AddControllersWithViews()
    .AddEmbeddedViewsForAssembly(typeof(YourApiController).Assembly);

这个方案适合视图写完之后很少改动的场景,部署起来也更方便,不用单独打包视图文件。

最后要注意的小细节

  • 确保主项目是项目引用了API项目,不是NuGet包引用,不然路径识别会出问题
  • 如果用的是.NET Core 3.1及以上版本,检查Razor编译的配置,别让编译过程跳过了API项目的视图

内容的提问来源于stack exchange,提问作者Jędrzej Danko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:04:23