如何在.NET 6 Worker Service项目中集成并初始化ASP.NET Core Web API
解决方案
在.NET 6中,你不需要分开维护Worker Service和Web API两个独立的宿主构建逻辑,可以通过WebApplication.CreateBuilder统一构建,同时启用Web API端点和后台Worker服务,具体实现如下:
替换Worker Service的Program.cs代码
直接使用WebApplication.CreateBuilder(它是.NET 6统一的宿主构建器,兼容Worker Service的后台任务能力),整合Web API的服务配置和Worker的后台服务注册:
var builder = WebApplication.CreateBuilder(args); // 1. 添加Web API所需服务(复制原WebAPI项目的服务配置) builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 2. 添加Worker后台服务(原Worker Service的核心逻辑) builder.Services.AddHostedService<Worker>(); var app = builder.Build(); // 3. 配置Web API请求管道(复制原WebAPI项目的中间件配置) if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); // 启动宿主(同时运行Web API和Worker后台任务) await app.RunAsync();
关键说明
WebApplication.CreateBuilder替代了原Worker的Host.CreateDefaultBuilder,它本质上是ASP.NET Core 6对宿主构建的统一封装,既支持Web API的HTTP端点,也支持注册IHostedService类型的后台任务。- 你不需要再单独维护两个项目的
Program.cs,可以把原Web API项目中的控制器、模型等代码迁移到Worker Service项目中,然后删除单独的Web API项目(如果不需要独立部署的话)。 - 如果必须保留两个独立项目,也可以将Worker Service作为Web API项目的一个后台服务注册,即在Web API的
Program.cs中添加builder.Services.AddHostedService<Worker>(),这样启动Web API时会同时运行Worker任务。
原代码报错原因
你之前尝试用UseStartup<APIStartup>报错,是因为.NET 6采用了顶级语句+最小API的新范式,不再默认使用Startup.cs类,所有服务配置和中间件配置都直接在Program.cs中完成,无需依赖Startup类。
内容的提问来源于stack exchange,提问作者fubar92
相关产品推荐
相关产品推荐

