| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- commit 501dd3924b8e738adfb525876c7af5a477314626
- Author: David Fowler <[email protected]>
- Date: Fri Nov 16 21:29:18 2018 -0800
- Added a method to configure the web host defaults (#298)
-
- - Added ConfigureWebHostDefaults to configure the web specific defaults on the generic host builder.
- diff --git a/build/dependencies.props b/build/dependencies.props
- index 39b8dbdf02e..ee4e17013bb 100644
- --- a/build/dependencies.props
- +++ b/build/dependencies.props
- @@ -3,31 +3,34 @@
- <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
- </PropertyGroup>
- <PropertyGroup Label="Package Versions">
- - <InternalAspNetCoreSdkPackageVersion>3.0.0-build-20181114.5</InternalAspNetCoreSdkPackageVersion>
- - <MicrosoftAspNetCoreAspNetCoreModulePackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreAspNetCoreModulePackageVersion>
- - <MicrosoftAspNetCoreAspNetCoreModuleV2PackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreAspNetCoreModuleV2PackageVersion>
- - <MicrosoftAspNetCoreDiagnosticsPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreDiagnosticsPackageVersion>
- - <MicrosoftAspNetCoreHostFilteringPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreHostFilteringPackageVersion>
- - <MicrosoftAspNetCoreHostingPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreHostingPackageVersion>
- - <MicrosoftAspNetCoreRoutingPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreRoutingPackageVersion>
- - <MicrosoftAspNetCoreServerIISIntegrationPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
- - <MicrosoftAspNetCoreServerIISPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerIISPackageVersion>
- - <MicrosoftAspNetCoreServerIntegrationTestingIISPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerIntegrationTestingIISPackageVersion>
- - <MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.7.0-alpha1-10742</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
- - <MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>
- - <MicrosoftAspNetCoreServerKestrelPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreServerKestrelPackageVersion>
- - <MicrosoftAspNetCoreStaticFilesPackageVersion>3.0.0-alpha1-10742</MicrosoftAspNetCoreStaticFilesPackageVersion>
- - <MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
- - <MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
- - <MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
- - <MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsConfigurationJsonPackageVersion>
- - <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
- - <MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingConfigurationPackageVersion>
- - <MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingConsolePackageVersion>
- - <MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingDebugPackageVersion>
- - <MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingEventSourcePackageVersion>
- - <MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview-181113-11</MicrosoftExtensionsLoggingPackageVersion>
- - <MicrosoftNETCoreAppPackageVersion>3.0.0-preview1-26907-05</MicrosoftNETCoreAppPackageVersion>
- + <InternalAspNetCoreSdkPackageVersion>3.0.0-alpha1-20181004.7</InternalAspNetCoreSdkPackageVersion>
- + <MicrosoftAspNetCoreAspNetCoreModulePackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreAspNetCoreModulePackageVersion>
- + <MicrosoftAspNetCoreAspNetCoreModuleV2PackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreAspNetCoreModuleV2PackageVersion>
- + <MicrosoftAspNetCoreDiagnosticsPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreDiagnosticsPackageVersion>
- + <MicrosoftAspNetCoreHostFilteringPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreHostFilteringPackageVersion>
- + <MicrosoftAspNetCoreHostingPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreHostingPackageVersion>
- + <MicrosoftAspNetCoreRoutingPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreRoutingPackageVersion>
- + <MicrosoftAspNetCoreServerIISIntegrationPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
- + <MicrosoftAspNetCoreServerIISPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreServerIISPackageVersion>
- + <MicrosoftAspNetCoreServerIntegrationTestingIISPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreServerIntegrationTestingIISPackageVersion>
- + <MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.7.0-alpha1-10733</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
- + <MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>
- + <MicrosoftAspNetCoreServerKestrelPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreServerKestrelPackageVersion>
- + <MicrosoftAspNetCoreStaticFilesPackageVersion>3.0.0-alpha1-10733</MicrosoftAspNetCoreStaticFilesPackageVersion>
- + <MicrosoftExtensionsConfigurationCommandLinePackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
- + <MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
- + <MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
- + <MicrosoftExtensionsConfigurationJsonPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsConfigurationJsonPackageVersion>
- + <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
- + <MicrosoftExtensionsLoggingConfigurationPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsLoggingConfigurationPackageVersion>
- + <MicrosoftExtensionsLoggingConsolePackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsLoggingConsolePackageVersion>
- + <MicrosoftExtensionsLoggingDebugPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsLoggingDebugPackageVersion>
- + <MicrosoftExtensionsLoggingEventSourcePackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsLoggingEventSourcePackageVersion>
- + <MicrosoftExtensionsLoggingPackageVersion>3.0.0-preview-181108-06</MicrosoftExtensionsLoggingPackageVersion>
- + <MicrosoftExtensionsHostingPackageVersion>3.0.0-alpha1-10733</MicrosoftExtensionsHostingPackageVersion>
- + <MicrosoftNETCoreApp20PackageVersion>2.0.9</MicrosoftNETCoreApp20PackageVersion>
- + <MicrosoftNETCoreApp21PackageVersion>2.1.3</MicrosoftNETCoreApp21PackageVersion>
- + <MicrosoftNETCoreApp22PackageVersion>2.2.0-rtm-27105-02</MicrosoftNETCoreApp22PackageVersion>
- <MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
- <MoqPackageVersion>4.10.0</MoqPackageVersion>
- <NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
- diff --git a/samples/SampleApp/Program.cs b/samples/SampleApp/Program.cs
- index b5eb9002735..1d95226e6cd 100644
- --- a/samples/SampleApp/Program.cs
- +++ b/samples/SampleApp/Program.cs
- @@ -7,6 +7,8 @@ using Microsoft.AspNetCore.Builder;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Http;
- using Microsoft.AspNetCore.Routing;
- +using Microsoft.Extensions.Configuration;
- +using Microsoft.Extensions.Hosting;
-
- namespace SampleApp
- {
- @@ -23,6 +25,8 @@ namespace SampleApp
- CustomApplicationBuilder();
-
- StartupClass(args);
- +
- + HostBuilderWithWebHost(args);
- }
-
- private static void HelloWorld()
- @@ -90,5 +94,21 @@ namespace SampleApp
- host.Run();
- }
- }
- +
- + private static void HostBuilderWithWebHost(string[] args)
- + {
- + var host = new HostBuilder()
- + .ConfigureAppConfiguration(config =>
- + {
- + config.AddCommandLine(args);
- + })
- + .ConfigureWebHostDefaults(builder =>
- + {
- + builder.UseStartup<Startup>();
- + })
- + .Build();
- +
- + host.Run();
- + }
- }
- }
- diff --git a/samples/SampleApp/SampleApp.csproj b/samples/SampleApp/SampleApp.csproj
- index 19586777f26..64625f55838 100644
- --- a/samples/SampleApp/SampleApp.csproj
- +++ b/samples/SampleApp/SampleApp.csproj
- @@ -1,4 +1,4 @@
- -<Project Sdk="Microsoft.NET.Sdk.Web">
- +<Project Sdk="Microsoft.NET.Sdk.Web">
-
- <PropertyGroup>
- <TargetFramework>netcoreapp3.0</TargetFramework>
- @@ -11,6 +11,7 @@
-
- <ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" />
- + <PackageReference Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsHostingPackageVersion)" />
- <ProjectReference Include="..\..\src\Microsoft.AspNetCore\Microsoft.AspNetCore.csproj" />
- </ItemGroup>
- </Project>
- diff --git a/src/Microsoft.AspNetCore/GenericHostBuilderExtensions.cs b/src/Microsoft.AspNetCore/GenericHostBuilderExtensions.cs
- new file mode 100644
- index 00000000000..80d0074e403
- --- /dev/null
- +++ b/src/Microsoft.AspNetCore/GenericHostBuilderExtensions.cs
- @@ -0,0 +1,33 @@
- +using System;
- +using Microsoft.AspNetCore.Hosting;
- +using Microsoft.AspNetCore;
- +
- +namespace Microsoft.Extensions.Hosting
- +{
- + /// <summary>
- + /// Extension methods for configuring the IWebHostBuilder.
- + /// </summary>
- + public static class GenericHostBuilderExtensions
- + {
- + /// <summary>
- + /// Initializes a new instance of the <see cref="IWebHostBuilder"/> class with pre-configured defaults.
- + /// </summary>
- + /// <remarks>
- + /// The following defaults are applied to the <see cref="IWebHostBuilder"/>:
- + /// use Kestrel as the web server and configure it using the application's configuration providers,
- + /// and enable IIS integration.
- + /// </remarks>
- + /// <param name="builder">The <see cref="IHostBuilder" /> instance to configure</param>
- + /// <param name="configure">The configure callback</param>
- + /// <returns></returns>
- + public static IHostBuilder ConfigureWebHostDefaults(this IHostBuilder builder, Action<IWebHostBuilder> configure)
- + {
- + return builder.ConfigureWebHost(webHostBuilder =>
- + {
- + WebHost.ConfigureWebDefaults(webHostBuilder);
- +
- + configure(webHostBuilder);
- + });
- + }
- + }
- +}
- diff --git a/src/Microsoft.AspNetCore/WebHost.cs b/src/Microsoft.AspNetCore/WebHost.cs
- index 10726c83565..fd9cadfcb89 100644
- --- a/src/Microsoft.AspNetCore/WebHost.cs
- +++ b/src/Microsoft.AspNetCore/WebHost.cs
- @@ -158,67 +158,73 @@ namespace Microsoft.AspNetCore
- builder.UseConfiguration(new ConfigurationBuilder().AddCommandLine(args).Build());
- }
-
- - builder.UseKestrel((builderContext, options) =>
- - {
- - options.Configure(builderContext.Configuration.GetSection("Kestrel"));
- - })
- - .ConfigureAppConfiguration((hostingContext, config) =>
- - {
- - var env = hostingContext.HostingEnvironment;
- + builder.ConfigureAppConfiguration((hostingContext, config) =>
- + {
- + var env = hostingContext.HostingEnvironment;
-
- - config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- - .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
- + config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- + .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
-
- - if (env.IsDevelopment())
- + if (env.IsDevelopment())
- + {
- + var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
- + if (appAssembly != null)
- {
- - var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));
- - if (appAssembly != null)
- - {
- - config.AddUserSecrets(appAssembly, optional: true);
- - }
- + config.AddUserSecrets(appAssembly, optional: true);
- }
- + }
-
- - config.AddEnvironmentVariables();
- + config.AddEnvironmentVariables();
-
- - if (args != null)
- - {
- - config.AddCommandLine(args);
- - }
- - })
- - .ConfigureLogging((hostingContext, logging) =>
- + if (args != null)
- {
- - logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
- - logging.AddConsole();
- - logging.AddDebug();
- - logging.AddEventSourceLogger();
- - })
- - .ConfigureServices((hostingContext, services) =>
- + config.AddCommandLine(args);
- + }
- + })
- + .ConfigureLogging((hostingContext, logging) =>
- + {
- + logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
- + logging.AddConsole();
- + logging.AddDebug();
- + logging.AddEventSourceLogger();
- + }).
- + UseDefaultServiceProvider((context, options) =>
- + {
- + options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
- + });
- +
- + ConfigureWebDefaults(builder);
- +
- + return builder;
- + }
- +
- + internal static void ConfigureWebDefaults(IWebHostBuilder builder)
- + {
- + builder.UseKestrel((builderContext, options) =>
- + {
- + options.Configure(builderContext.Configuration.GetSection("Kestrel"));
- + })
- + .ConfigureServices((hostingContext, services) =>
- + {
- + // Fallback
- + services.PostConfigure<HostFilteringOptions>(options =>
- {
- - // Fallback
- - services.PostConfigure<HostFilteringOptions>(options =>
- + if (options.AllowedHosts == null || options.AllowedHosts.Count == 0)
- {
- - if (options.AllowedHosts == null || options.AllowedHosts.Count == 0)
- - {
- - // "AllowedHosts": "localhost;127.0.0.1;[::1]"
- - var hosts = hostingContext.Configuration["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
- - // Fall back to "*" to disable.
- - options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });
- - }
- - });
- - // Change notification
- - services.AddSingleton<IOptionsChangeTokenSource<HostFilteringOptions>>(
- - new ConfigurationChangeTokenSource<HostFilteringOptions>(hostingContext.Configuration));
- -
- - services.AddTransient<IStartupFilter, HostFilteringStartupFilter>();
- - })
- - .UseIIS()
- - .UseIISIntegration()
- - .UseDefaultServiceProvider((context, options) =>
- - {
- - options.ValidateScopes = context.HostingEnvironment.IsDevelopment();
- + // "AllowedHosts": "localhost;127.0.0.1;[::1]"
- + var hosts = hostingContext.Configuration["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
- + // Fall back to "*" to disable.
- + options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });
- + }
- });
- -
- - return builder;
- + // Change notification
- + services.AddSingleton<IOptionsChangeTokenSource<HostFilteringOptions>>(
- + new ConfigurationChangeTokenSource<HostFilteringOptions>(hostingContext.Configuration));
- +
- + services.AddTransient<IStartupFilter, HostFilteringStartupFilter>();
- + })
- + .UseIIS()
- + .UseIISIntegration();
- }
-
- /// <summary>
|