为什么 ASP.NET Core 6 在从另一个 .NET Core 应用程序运行时无法发现控制器

The*_*der 8 c# asp.net asp.net-web-api asp.net-core

我创建了一个开箱即用的 ASP.NET Core 6 Web API 项目。

当我启动该项目时,我可以看到 Swagger 已加载,显示单个 WeatherForecast 端点,该端点在测试时可以工作。

在此输入图像描述

但是,当我从另一个 .NET Core 应用程序启动 Web API 项目时,未发现控制器。Swagger 返回以下消息以供参考。手动调用端点Url也失败。

在此输入图像描述

经过对此问题的一些调查后,我发现如果我手动注册 WeatherForecast 控制器,它将在 Swagger 中可见并在请求时可访问。

在此输入图像描述

为什么从另一个 .NET Core 应用程序运行 ASP.NET 应用程序时未发现 WeatherForecast 控制器?

源代码:GitHub

Vac*_*ano 8

使用@RichardDeeming链接的答案,我能够让它在 .Net 6 中工作。AddControllers在 Program.cs 中查找并将其调整为如下所示(替换TestServiceController目标程序集中的控制器之一):

var assembly = typeof(TestServiceController).Assembly;

builder.Services.AddControllers()
                .PartManager.ApplicationParts.Add(new AssemblyPart(assembly) );
Run Code Online (Sandbox Code Playgroud)


小智 3

你有没有尝试过这个:

builder.Services.AddMvc()
                .AddApplicationPart(typeof(WeatherForecastController).Assembly)
                .AddControllersAsServices();
Run Code Online (Sandbox Code Playgroud)