如何在库类型程序集中实现继承自 ControllerBase 的控制器?

How to Implement Controllers Inherited from ControllerBase in Library-Type Assemblies?

提问人:Aleksandr Sergeevich 提问时间:11/18/2023 更新时间:11/18/2023 访问量:7

问:

我正在使用 C# ASP.NET Core 6,并且在“库”类型的程序集中实现从 ControllerBase 继承的控制器时面临挑战。以前,可以加载版本 2.2.5 或版本 2.2.8 等包。在将包含控制器的 NuGet 包添加到 API 时,这会自动添加控制器。但是,这些软件包现在被认为是过时的。此外,无法从 NuGet 下载相同的 NuGet 包版本 6.0.0,因为它现在包含在标准 ASP.NET Core 包中。但这不适合我的用例,因为我正在使用类库。Microsoft.AspNetCore.Mvc.CoreMicrosoft.AspNetCore.App

考虑到上述软件包的不可用和过时,如何使继承自 ControllerBase 的控制器在具有 ASP.NET Core 6 的类库中工作?任何指导或替代方法将不胜感激。

Microsoft.AspNetCore.App版本 2.2.8 已弃用。 版本 6.0.0 不起作用。 6.0.0 不起作用。Microsoft.AspNetCore.Mvc.AbstractionsMicrosoft.AspNetCore.Mvc.Core version

C# nuget包 asp.net-core-6.0

评论


答:

0赞 Md Farid Uddin Kiron 11/21/2023 #1

我正在使用 C# ASP.NET Core 6 并面临以下挑战 在程序集中实现继承自 ControllerBase 的控制器 属于“库”类型。以前,可以加载包 像 Microsoft.AspNetCore.Mvc.Core 版本 2.2.5 或 Microsoft.AspNetCore.App 版本 2.2.8。这会自动添加一个 控制器,将包含它的 NuGet 包添加到 API 时。 但是,这些软件包现在被认为是过时的。此外, 相同的 NuGet 包版本 6.0.0 无法从以下位置下载 NuGet,因为它现在包含在标准 ASP.NET Core 包中。 但这不适合我的用例,因为我正在使用一个类 图书馆。

好吧,根据您的场景和描述,我试图调查您的问题。是的,你所描述的是正确的。

根据这个官方文档,我们不能再从 nuget 获取该包了。

但是,一旦您添加了引用,它就会自动获取 contoller 引用。但是我尝试包含在类库中,并最终将该库引用包含在我的 webAPI 项目中,并且它成功了。Microsoft.AspNetCore.Mvc;

以下是我所做的步骤,供您参考:

拿了最新版本的类库:

enter image description heree

类库中的控件:

using Microsoft.AspNetCore.Mvc;

namespace ControllerClassLibrary
{
    [Route("api/[controller]")]
    public class ControllerInLibraryController : ControllerBase
    {
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "test1", "test2" };
        }
    }
}

主 Web API 项目程序 .cs:

builder.Services.AddControllers().AddApplicationPart(Assembly.Load(new AssemblyName("ControllerClassLibrary"))); 

输出:

enter image description here

注意:一旦我通过 defult 添加了包,它就添加了 Controller 作为派生类,但后来我手动将其更新到并相应地工作。Microsoft.AspNetCore.MvcControllerBase