先把概念捋顺
在 ASP.NET Core 里,主机负责应用的启动、生命周期、依赖注入、配置和日志。Web 应用还会顺带把请求管道也搭起来。早期项目里常见的是 WebHost,后来通用主机 Host 成了基础,到了 .NET 6 之后,WebApplication 基本就是新 Web 项目的默认写法。
这几个名字看着像一回事,实际分工不一样。选错模型通常不会立刻报错,但代码会越来越绕,迁移时也容易踩坑。
三种主机各自干什么
WebHost:老一代 Web 主机
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
=> WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) => { /* 配置设置 */ })
.ConfigureLogging(logging => { /* 日志配置 */ })
.UseStartup<Startup>();
}
它的特点很明显:Startup 分出去,配置和管道也分得比较散。放在 ASP.NET Core 3.0 以后看,这套写法偏旧了,但老项目里还很常见,尤其是还没动过大版本升级的代码库。
Host:通用主机
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder ()
=> Host.CreateDefaultBuilder()
.ConfigureServices((hostContext, services) => {
services.AddHostedService<Worker>();
});
}
:
{
{
}
}


