Add HostFiltering to the default web host

This commit is contained in:
Chris Ross (ASP.NET) 2018-03-23 14:41:22 -07:00
parent e93503fcd7
commit 0e7f12bfb3
7 changed files with 66 additions and 20 deletions

View File

@ -4,26 +4,27 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup Label="Package Versions"> <PropertyGroup Label="Package Versions">
<InternalAspNetCoreSdkPackageVersion>2.1.0-preview2-15742</InternalAspNetCoreSdkPackageVersion> <InternalAspNetCoreSdkPackageVersion>2.1.0-preview2-15742</InternalAspNetCoreSdkPackageVersion>
<MicrosoftAspNetCoreDiagnosticsPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreDiagnosticsPackageVersion> <MicrosoftAspNetCoreDiagnosticsPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreDiagnosticsPackageVersion>
<MicrosoftAspNetCoreHostingPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreHostingPackageVersion> <MicrosoftAspNetCoreHostFilteringPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreHostFilteringPackageVersion>
<MicrosoftAspNetCoreRoutingPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreRoutingPackageVersion> <MicrosoftAspNetCoreHostingPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreHostingPackageVersion>
<MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreServerIISIntegrationPackageVersion> <MicrosoftAspNetCoreRoutingPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreRoutingPackageVersion>
<MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.0-preview2-30355</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion> <MicrosoftAspNetCoreServerIISIntegrationPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreServerIISIntegrationPackageVersion>
<MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreServerKestrelHttpsPackageVersion> <MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>0.5.0-preview2-30431</MicrosoftAspNetCoreServerIntegrationTestingPackageVersion>
<MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreServerKestrelPackageVersion> <MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreServerKestrelHttpsPackageVersion>
<MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview2-30355</MicrosoftAspNetCoreStaticFilesPackageVersion> <MicrosoftAspNetCoreServerKestrelPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreServerKestrelPackageVersion>
<MicrosoftExtensionsConfigurationCommandLinePackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsConfigurationCommandLinePackageVersion> <MicrosoftAspNetCoreStaticFilesPackageVersion>2.1.0-preview2-30431</MicrosoftAspNetCoreStaticFilesPackageVersion>
<MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion> <MicrosoftExtensionsConfigurationCommandLinePackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsConfigurationCommandLinePackageVersion>
<MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion> <MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsConfigurationEnvironmentVariablesPackageVersion>
<MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsConfigurationJsonPackageVersion> <MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsConfigurationFileExtensionsPackageVersion>
<MicrosoftExtensionsConfigurationUserSecretsPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsConfigurationUserSecretsPackageVersion> <MicrosoftExtensionsConfigurationJsonPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsConfigurationJsonPackageVersion>
<MicrosoftExtensionsLoggingConfigurationPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsLoggingConfigurationPackageVersion> <MicrosoftExtensionsConfigurationUserSecretsPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsConfigurationUserSecretsPackageVersion>
<MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsLoggingConsolePackageVersion> <MicrosoftExtensionsLoggingConfigurationPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsLoggingConfigurationPackageVersion>
<MicrosoftExtensionsLoggingDebugPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsLoggingDebugPackageVersion> <MicrosoftExtensionsLoggingConsolePackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsLoggingConsolePackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>2.1.0-preview2-30355</MicrosoftExtensionsLoggingPackageVersion> <MicrosoftExtensionsLoggingDebugPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsLoggingDebugPackageVersion>
<MicrosoftExtensionsLoggingPackageVersion>2.1.0-preview2-30431</MicrosoftExtensionsLoggingPackageVersion>
<MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion> <MicrosoftNETCoreApp20PackageVersion>2.0.0</MicrosoftNETCoreApp20PackageVersion>
<MicrosoftNETCoreApp21PackageVersion>2.1.0-preview2-26314-02</MicrosoftNETCoreApp21PackageVersion> <MicrosoftNETCoreApp21PackageVersion>2.1.0-preview2-26314-02</MicrosoftNETCoreApp21PackageVersion>
<MicrosoftNETTestSdkPackageVersion>15.6.0</MicrosoftNETTestSdkPackageVersion> <MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
<MoqPackageVersion>4.7.49</MoqPackageVersion> <MoqPackageVersion>4.7.49</MoqPackageVersion>
<XunitPackageVersion>2.3.1</XunitPackageVersion> <XunitPackageVersion>2.3.1</XunitPackageVersion>
<XunitRunnerVisualStudioPackageVersion>2.4.0-beta.1.build3945</XunitRunnerVisualStudioPackageVersion> <XunitRunnerVisualStudioPackageVersion>2.4.0-beta.1.build3945</XunitRunnerVisualStudioPackageVersion>

View File

@ -1,4 +1,5 @@
{ {
"AllowedHosts": "example.com;localhost",
"Kestrel": { "Kestrel": {
"EndPoints": { "EndPoints": {
"Http": { "Http": {

View File

@ -0,0 +1,21 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
namespace Microsoft.AspNetCore
{
internal class HostFilteringStartupFilter : IStartupFilter
{
public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
return app =>
{
app.UseHostFiltering();
next(app);
};
}
}
}

View File

@ -10,6 +10,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="$(MicrosoftAspNetCoreDiagnosticsPackageVersion)" PrivateAssets="None" /> <PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="$(MicrosoftAspNetCoreDiagnosticsPackageVersion)" PrivateAssets="None" />
<PackageReference Include="Microsoft.AspNetCore.HostFiltering" Version="$(MicrosoftAspNetCoreHostFilteringPackageVersion)" PrivateAssets="None" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" PrivateAssets="None" /> <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="$(MicrosoftAspNetCoreHostingPackageVersion)" PrivateAssets="None" />
<PackageReference Include="Microsoft.AspNetCore.Routing" Version="$(MicrosoftAspNetCoreRoutingPackageVersion)" PrivateAssets="None" /> <PackageReference Include="Microsoft.AspNetCore.Routing" Version="$(MicrosoftAspNetCoreRoutingPackageVersion)" PrivateAssets="None" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="$(MicrosoftAspNetCoreServerIISIntegrationPackageVersion)" PrivateAssets="None" /> <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="$(MicrosoftAspNetCoreServerIISIntegrationPackageVersion)" PrivateAssets="None" />

View File

@ -182,6 +182,16 @@ namespace Microsoft.AspNetCore
logging.AddConsole(); logging.AddConsole();
logging.AddDebug(); logging.AddDebug();
}) })
.ConfigureServices((hostingContext, services) =>
{
var hosts = hostingContext.Configuration["AllowedHosts"]?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
services.AddHostFiltering(options =>
{
options.AllowedHosts = (hosts?.Length > 0 ? hosts : new[] { "*" });
});
services.AddTransient<IStartupFilter, HostFilteringStartupFilter>();
})
.UseIISIntegration() .UseIISIntegration()
.UseDefaultServiceProvider((context, options) => .UseDefaultServiceProvider((context, options) =>
{ {

View File

@ -4,8 +4,11 @@
using System; using System;
using System.IO; using System.IO;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.HostFiltering;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
namespace CreateDefaultBuilderOfTApp namespace CreateDefaultBuilderOfTApp
{ {
@ -15,11 +18,12 @@ namespace CreateDefaultBuilderOfTApp
{ {
app.Run(context => app.Run(context =>
{ {
return context.Response.WriteAsync(GetResponseMessage(webHostBuilderContext)); var message = GetResponseMessage(webHostBuilderContext, app.ApplicationServices.GetRequiredService<IOptions<HostFilteringOptions>>());
return context.Response.WriteAsync(message);
}); });
} }
private static string GetResponseMessage(WebHostBuilderContext context) private static string GetResponseMessage(WebHostBuilderContext context, IOptions<HostFilteringOptions> hostFilteringOptions)
{ {
// Verify ContentRootPath set // Verify ContentRootPath set
if (!string.Equals(Directory.GetCurrentDirectory(), context.HostingEnvironment.ContentRootPath, StringComparison.Ordinal)) if (!string.Equals(Directory.GetCurrentDirectory(), context.HostingEnvironment.ContentRootPath, StringComparison.Ordinal))
@ -53,6 +57,13 @@ namespace CreateDefaultBuilderOfTApp
return $"Command line arguments not loaded into Configuration."; return $"Command line arguments not loaded into Configuration.";
} }
// Verify allowed hosts were loaded
var hosts = string.Join(',', hostFilteringOptions.Value.AllowedHosts);
if (!string.Equals("example.com,localhost", hosts, StringComparison.Ordinal))
{
return $"AllowedHosts not loaded into Options.";
}
// TODO: Verify AddConsole called // TODO: Verify AddConsole called
// TODO: Verify AddDebug called // TODO: Verify AddDebug called
// TODO: Verify UseIISIntegration called // TODO: Verify UseIISIntegration called

View File

@ -1,5 +1,6 @@
{ {
"settingsKey": "settingsValue", "settingsKey": "settingsValue",
"AllowedHosts": "example.com;localhost",
"Kestrel": { "Kestrel": {
"Endpoints": { "Endpoints": {
"HTTP": { "HTTP": {