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

问题描述 投票:0回答: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 包中。但这不适合我的用例,因为我正在使用类库。

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

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

c# nuget-package asp.net-core-6.0
1个回答
0
投票

我正在使用 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 获取该包。

但是,尽管添加引用后它会自动获取控制器引用。但我尝试将

Microsoft.AspNetCore.Mvc;
包含在类库中,并最终将该库引用包含在我的 webAPI 项目中,并且成功了。

以下是我所做的步骤,添加供大家参考:

取最新版本的类库:

e

类库中的控件:

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"))); 

输出:

注意: 一旦我添加了

Microsoft.AspNetCore.Mvc
包,它默认添加了 Controller 作为派生类,但后来我手动将其更新为
ControllerBase
并相应地工作。

© www.soinside.com 2019 - 2024. All rights reserved.