Dot-Net-Core

ConfigureWebHostDefaults 和 ConfigureWebHost 方法有什麼區別?

  • November 18, 2019

我在通用主機建構器類 ( ) 上看到 2 個幾乎相同的擴展方法HostBuilderConfigureWebHostDefaultsConfigureWebHost. 它們具有相同的簽名並位於不同的程序集中。我在指南中看到ConfigureWebHostDefaults過,但幾乎沒有關於ConfigureWebHost. 它們之間有什麼區別?

通過 ASP.NET Core 原始碼,ConfigureWebHostDefaults等於:

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

               configure(webHostBuilder);
           });
       }

它只是呼叫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,則添加 Forwarded Headers 中間件。啟用 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

引用自:https://stackoverflow.com/questions/58905731