ConfigureWebHostDefaults 和 ConfigureWebHost 方法之间有什么区别?

Rus*_*tam 8 .net-core

我在通用主机构建器类 ( HostBuilder):ConfigureWebHostDefaultsConfigureWebHost. 它们具有相同的签名并位于不同的程序集中。我ConfigureWebHostDefaults在指南中看到过,但几乎没有关于ConfigureWebHost. 它们之间有什么区别?

And*_*uin 13

通过 ASP.NET Core 源代码,ConfigureWebHostDefaults等于:

        public static IHostBuilder ConfigureWebHostDefaults(this IHostBuilder builder, Action<IWebHostBuilder> configure)
        {
            return builder.ConfigureWebHost(webHostBuilder =>
            {
                WebHost.ConfigureWebDefaults(webHostBuilder);

                configure(webHostBuilder);
            });
        }
Run Code Online (Sandbox Code Playgroud)

它只是调用ConfigureWebHost,但会增加一个步骤:ConfigureWebDefaults

至于ConfigureWebDefaults,源代码很长,放在这里:

https://github.com/aspnet/AspNetCore/blob/1480b998660d2f77d0605376eefab6a83474ce07/src/DefaultBuilder/src/WebHost.cs#L280

对于不同之处,使用以下内容ConfigureWebHostDefaults配置网络主机:

  • 使用 Kestrel 作为 Web 服务器并使用应用程序的配置提供程序对其进行配置
  • 添加 HostFiltering 中间件,
  • 如果 ASPNETCORE_FORWARDEDHEADERS_ENABLED=true,则添加 ForwardedHeaders 中间件,
  • 启用 IIS 集成。

另外,官方文件提到:

ConfigureWebHostDefaults 方法从以“ASPNETCORE_”为前缀的环境变量加载主机配置。将 Kestrel 服务器设置为 Web 服务器并使用应用的托管配置提供程序对其进行配置。有关 Kestrel 服务器的默认选项,请参阅 ASP.NET Core 中的 Kestrel Web 服务器实现。添加主机过滤中间件。如果 ASPNETCORE_FORWARDEDHEADERS_ENABLED=true,则添加转发头中间件。启用 IIS 集成。有关 IIS 默认选项,请参阅使用 IIS 在 Windows 上托管 ASP.NET Core。

文档链接:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-3.0#default-builder-settings