You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Core中如何自定义构建器替代CreateDefaultBuilder?

自定义ASP.NET主机构建方案

需求背景

拒绝使用Host.CreateDefaultBuilder和ConfigureWebHostDefaults,完全手动构建主机以规避默认预设逻辑,自主控制配置与服务流程。

原代码

var host = Host.CreateDefaultBuilder(args)
       .ConfigureAppConfiguration(builder =>
       {
           builder.Sources.Clear();
           ...
       })
       .ConfigureWebHostDefaults(webBuilder =>
       {
           ...
       })
       .ConfigureServices((context, services) =>
        services.Configure<...>(
            context.Configuration.GetSection("...")))
    .Build();

自定义构建替换方案

直接实例化HostBuilder,手动添加所需配置、Web主机设置及服务:

// 初始化空白主机构建器
var hostBuilder = new HostBuilder();

// 1. 自主配置应用数据源(无默认预设,完全自定义)
hostBuilder.ConfigureAppConfiguration((hostingContext, configBuilder) =>
{
    // 按需添加配置源,示例参考
    configBuilder
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables()
        .AddCommandLine(args);
    
    // 替换为你的专属配置逻辑,比如仅加载指定配置文件
    // ...
});

// 2. 手动配置Web主机(替代ConfigureWebHostDefaults的预设逻辑)
hostBuilder.ConfigureWebHost(webBuilder =>
{
    // 指定启动类
    webBuilder.UseStartup<Startup>();
    
    // 自定义Kestrel服务器配置
    webBuilder.UseKestrel(options =>
    {
        options.ListenAnyIP(5000);
        // 添加端口、证书等专属配置
        // ...
    });
    
    // 设置内容根目录与运行环境
    webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
    webBuilder.UseEnvironment(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production");
    
    // 替换为你原本在ConfigureWebHostDefaults中的业务逻辑
    // ...
});

// 3. 自定义服务注册
hostBuilder.ConfigureServices((context, services) =>
{
    // 保留原代码中的服务配置逻辑
    services.Configure<YourOptions>(context.Configuration.GetSection("YourSection"));
    
    // 按需添加其他服务,如控制器、中间件依赖等
    services.AddControllersWithViews();
    // ...
});

// 构建并运行主机
var host = hostBuilder.Build();
await host.RunAsync();

核心优势

  • 零默认预设:HostBuilder为空白起点,不会引入CreateDefaultBuilder自带的机密管理器、Azure应用配置等默认配置源
  • 完全可控的Web配置:ConfigureWebHost替代ConfigureWebHostDefaults,可自主取舍ForwardedHeaders、IISIntegration等预设组件
  • 灵活的配置源管理:无需先清空默认配置源,直接按需添加所需配置文件、环境变量等

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:15:43