.NET 9自托管Kestrel WinForms应用如何调用类库控制器?
解决方案
当控制器移到外部类库后,ASP.NET Core默认只会扫描启动程序集(你的WinForms项目)中的控制器,因此需要显式配置框架去扫描目标类库的程序集。修改MyWebAPI类的StartAsync方法即可解决问题:
修改后的StartAsync方法代码
public async Task StartAsync(int port) { builder = WebApplication.CreateBuilder(); builder.WebHost.ConfigureKestrel((context, serverOptions) => { serverOptions.Listen(System.Net.IPAddress.Loopback, port); }); // 添加控制器服务,并指定外部类库的程序集 builder.Services.AddControllers() // 替换为你类库中任意一个控制器的完整类型 .AddApplicationPart(typeof(MyRESTFulService.Controllers.YourController).Assembly); app = builder.Build(); // 配置HTTP请求管道 app.UseAuthorization(); app.MapControllers(); await app.StartAsync(); }
关键说明
AddApplicationPart方法用于告知ASP.NET Core MVC扫描额外的程序集,以此发现类库中的控制器。- 使用
typeof(目标控制器类型).Assembly可以精准获取类库程序集,相比直接写程序集名称,能避免因名称变更导致的错误。 - 确认WinForms项目已正确引用
MyRESTFulService类库项目(你提到已配置依赖项,此步骤可忽略)。
内容的提问来源于stack exchange,提问作者ShamilS
相关产品推荐
相关产品推荐

