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

ASP.NET Core 6类库中如何实现继承自ControllerBase的控制器?

在ASP.NET Core 6类库中实现继承自ControllerBase的控制器

1. 配置类库项目的框架引用

ASP.NET Core 3.0+ 开始,Microsoft.AspNetCore.Mvc.Core等核心包不再作为独立NuGet包发布,而是包含在ASP.NET Core共享框架中。对于类库项目,只需在项目文件(.csproj)中添加对共享框架的引用,无需手动安装过时的NuGet包:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <!-- 引入ASP.NET Core共享框架,包含ControllerBase等核心类型 -->
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>
</Project>

2. 实现继承自ControllerBase的控制器

在类库中正常编写控制器即可,和API项目中的控制器写法一致:

using Microsoft.AspNetCore.Mvc;

namespace LibraryControllers;

[ApiController]
[Route("api/[controller]")]
public class LibraryDemoController : ControllerBase
{
    [HttpGet("test")]
    public IActionResult GetTestResponse()
    {
        return Ok("Response from class library controller");
    }
}

3. 在API项目中加载类库的控制器

默认情况下,ASP.NET Core 6只会扫描启动项目的程序集来发现控制器。要让API项目识别类库中的控制器,需要在Program.cs中配置控制器服务时,添加类库的程序集:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务,并指定要扫描的类库程序集
builder.Services.AddControllers()
    .AddApplicationPart(typeof(LibraryControllers.LibraryDemoController).Assembly);

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

如果类库中有多个控制器,也可以通过类库中的任意类型获取程序集,无需逐个添加。

替代方案:使用控制器特性标记

如果不想手动添加程序集引用,可以在类库的控制器上保留[ApiController]特性(已在示例中使用),确保API项目在扫描时能识别到符合条件的控制器。另外,也可以在API项目中使用AddControllersAsServices()来注册所有控制器,但前提是已正确添加类库的程序集引用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:00:18