Add/Skip .Net Core 中的 Web ApiController API

Add/Skip ApiController for Web API in .Net Core

我在 .netcore 3.1 中创建了 windows 表单应用程序,它托管两个 WEB Api 服务,使用 WebHostBuilder 来自 AspNetCore 3.1 的框架依赖。 (一个在端口 5000 上,一个在 5001 上)。

我还创建了两个 Api控制器,带有注释:

[Route("api/[controller]")] [ApiController]

第二个:

[Route("api2/[controller]")] [ApiController]

在两个 Startup 类 中,我设置:

services.AddControllers();

及以后:

endpoints.MapControllers()

它就像一个魅力。

现在我希望第一个控制器只能通过端口 5000 访问,第二个控制器只能通过 5001 访问。 运行时将它们都添加到两个 WEB Api.

例如:

首先Api(在端口 5000)

...:5000/api/ - 有效!

...:5000/api2/ - 404!

第二个Api(在端口 5001)

...:5001/api/ - 404!

...:5001/api2/ - 有效!

有没有办法将特定的控制器注册到特定的 WEB Api,而不是添加项目中的所有内容?

例如,仅添加以路由“api/”或任何特定名称空间中的路由开头的控制器,或者...任何方式...

所以我花了一个周末的时间来检查与我的案例甚至远程相关的每一个答案。

所以基本上你要做的就是 ConfigureApplicationPartManager 这样的:

services.AddControllers().ConfigureApplicationPartManager( manager = >...

然后你可以 add/remove 零件。 (例如,如果你想删除程序集)

并覆盖 ControllerFeatureProvider 的 IsController 方法。 (所以你基本上可以分辨什么是控制器,什么不是。)

这样您就可以托管两个独立的 WEB Api,每个都有自己的一组控制器。 我决定将它们放在两个单独的命名空间中,在两个单独的文件夹中,并像在我的项目中那样管理它们。

从我阅读的数百万字中,我发现这两个答案非常有用:

我希望这对以后的人有所帮助。