[Routing] Move to GenericHost (#24281)

This commit is contained in:
Kahbazi 2020-07-27 21:33:58 +04:30 committed by GitHub
parent f26942805d
commit e893ef59e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 329 additions and 174 deletions

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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;
@ -6,6 +6,9 @@ using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit;
namespace Microsoft.AspNetCore.Routing.FunctionalTests
@ -13,19 +16,24 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public class EndpointRoutingBenchmarkTest : IDisposable
{
private readonly HttpClient _client;
private readonly IHost _host;
private readonly TestServer _testServer;
public EndpointRoutingBenchmarkTest()
{
// This switch and value are set by benchmark server when running the app for profiling.
var args = new[] { "--scenarios", "PlaintextEndpointRouting" };
var webHostBuilder = Benchmarks.Program.GetWebHostBuilder(args);
var hostBuilder = Benchmarks.Program.GetHostBuilder(args);
_host = hostBuilder.Build();
// Make sure we are using the right startup
var startupName = webHostBuilder.GetSetting("Startup");
Assert.Equal(nameof(Benchmarks.StartupUsingEndpointRouting), startupName);
var configuration = _host.Services.GetService<IConfiguration>();
var startupName = configuration["Startup"];
Assert.Equal(nameof(Benchmarks.StartupUsingEndpointRouting), startupName);
_testServer = new TestServer(webHostBuilder);
_testServer = _host.GetTestServer();
_host.Start();
_client = _testServer.CreateClient();
_client.BaseAddress = new Uri("http://localhost");
}
@ -53,6 +61,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
{
_testServer.Dispose();
_client.Dispose();
_host.Dispose();
}
}
}

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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;
@ -6,6 +6,10 @@ using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.TestHost;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit;
namespace Microsoft.AspNetCore.Routing.FunctionalTests
@ -13,19 +17,24 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public class RouterBenchmarkTest : IDisposable
{
private readonly HttpClient _client;
private readonly IHost _host;
private readonly TestServer _testServer;
public RouterBenchmarkTest()
{
// This switch and value are set by benchmark server when running the app for profiling.
var args = new[] { "--scenarios", "PlaintextRouting" };
var webHostBuilder = Benchmarks.Program.GetWebHostBuilder(args);
var hostBuilder = Benchmarks.Program.GetHostBuilder(args);
_host = hostBuilder.Build();
// Make sure we are using the right startup
var startupName = webHostBuilder.GetSetting("Startup");
var configuration = _host.Services.GetService<IConfiguration>();
var startupName = configuration["Startup"];
Assert.Equal(nameof(Benchmarks.StartupUsingRouter), startupName);
_testServer = new TestServer(webHostBuilder);
_testServer = _host.GetTestServer();
_host.Start();
_client = _testServer.CreateClient();
_client.BaseAddress = new Uri("http://localhost");
}
@ -53,6 +62,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
{
_testServer.Dispose();
_client.Dispose();
_host.Dispose();
}
}
}
}

View File

@ -10,6 +10,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Xunit;
namespace Microsoft.AspNetCore.Routing.FunctionalTests
@ -31,20 +32,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_WhenNoAuthMetadataIsConfigured()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(b => b.Map("/", TestDelegate));
})
.ConfigureServices(services =>
{
services.AddAuthorization();
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(b => b.Map("/", TestDelegate));
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddAuthorization();
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var response = await server.CreateRequest("/").SendAsync("GET");
@ -55,20 +64,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_WhenEndpointIsNotFound()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(b => b.Map("/", TestDelegate));
})
.ConfigureServices(services =>
{
services.AddAuthorization();
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(b => b.Map("/", TestDelegate));
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddAuthorization();
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var response = await server.CreateRequest("/not-found").SendAsync("GET");
@ -79,20 +96,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_WithAuthorizedEndpoint()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var response = await server.CreateRequest("/").SendAsync("GET");
@ -103,20 +128,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_NotConfigured_Throws()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
});
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => server.CreateRequest("/").SendAsync("GET"));
Assert.Equal(AuthErrorMessage, ex.Message);
@ -126,18 +159,26 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_NotConfigured_WhenEndpointIsNotFound()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.ConfigureServices(services =>
{
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var response = await server.CreateRequest("/not-found").SendAsync("GET");
@ -148,20 +189,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_ConfiguredBeforeRouting_Throws()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseAuthorization();
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseAuthorization();
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => server.CreateRequest("/").SendAsync("GET"));
Assert.Equal(AuthErrorMessage, ex.Message);
@ -171,20 +220,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task AuthorizationMiddleware_ConfiguredAfterRouting_Throws()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
app.UseAuthorization();
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireAuthorization());
app.UseAuthorization();
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddAuthorization(options => options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAssertion(_ => true).Build());
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => server.CreateRequest("/").SendAsync("GET"));
Assert.Equal(AuthErrorMessage, ex.Message);
@ -194,20 +251,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task CorsMiddleware_WithCorsEndpoint()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseRouting();
app.UseCors();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin()));
})
.ConfigureServices(services =>
{
services.AddCors();
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseRouting();
app.UseCors();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin()));
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddCors();
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var response = await server.CreateRequest("/").SendAsync("PUT");
@ -218,20 +283,28 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task CorsMiddleware_ConfiguredBeforeRouting_Throws()
{
// Arrange
var builder = new WebHostBuilder();
builder.Configure(app =>
{
app.UseCors();
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin()));
})
.ConfigureServices(services =>
{
services.AddCors();
services.AddRouting();
});
using var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.Configure(app =>
{
app.UseCors();
app.UseRouting();
app.UseEndpoints(b => b.Map("/", TestDelegate).RequireCors(policy => policy.AllowAnyOrigin()));
})
.UseTestServer();
})
.ConfigureServices(services =>
{
services.AddCors();
services.AddRouting();
})
.Build();
using var server = new TestServer(builder);
using var server = host.GetTestServer();
await host.StartAsync();
var ex = await Assert.ThrowsAsync<InvalidOperationException>(() => server.CreateRequest("/").SendAsync("GET"));
Assert.Equal(CORSErrorMessage, ex.Message);

View File

@ -6,6 +6,7 @@ using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using RoutingWebSite;
using Xunit;
@ -14,12 +15,17 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public class EndpointRoutingSampleTest : IDisposable
{
private readonly HttpClient _client;
private readonly IHost _host;
private readonly TestServer _testServer;
public EndpointRoutingSampleTest()
{
var webHostBuilder = Program.GetWebHostBuilder(new[] { Program.EndpointRoutingScenario, });
_testServer = new TestServer(webHostBuilder);
var hostBuilder = Program.GetHostBuilder(new[] { Program.EndpointRoutingScenario, });
_host = hostBuilder.Build();
_testServer = _host.GetTestServer();
_host.Start();
_client = _testServer.CreateClient();
_client.BaseAddress = new Uri("http://localhost");
}
@ -227,6 +233,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
{
_testServer.Dispose();
_client.Dispose();
_host.Dispose();
}
}
}

View File

@ -6,6 +6,7 @@ using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using RoutingWebSite;
using Xunit;
@ -14,12 +15,15 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public class RouterSampleTest : IDisposable
{
private readonly HttpClient _client;
private readonly IHost _host;
private readonly TestServer _testServer;
public RouterSampleTest()
{
var webHostBuilder = Program.GetWebHostBuilder(new[] { Program.RouterScenario, });
_testServer = new TestServer(webHostBuilder);
var hostBuilder = Program.GetHostBuilder(new[] { Program.RouterScenario, });
_host = hostBuilder.Build();
_testServer = _host.GetTestServer();
_host.Start();
_client = _testServer.CreateClient();
_client.BaseAddress = new Uri("http://localhost");
}
@ -96,6 +100,7 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
{
_testServer.Dispose();
_client.Dispose();
_host.Dispose();
}
}
}

View File

@ -5,6 +5,7 @@ using System;
using System.Net.Http;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Routing.FunctionalTests
{
@ -14,10 +15,18 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public RoutingTestFixture()
{
var builder = new WebHostBuilder()
.UseStartup(typeof(TStartup));
var host = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseStartup(typeof(TStartup))
.UseTestServer();
})
.Build();
_server = new TestServer(builder);
_server = host.GetTestServer();
host.Start();
Client = _server.CreateClient();
Client.BaseAddress = new Uri("http://localhost");

View File

@ -1,4 +1,4 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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;
@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
using Microsoft.Extensions.Hosting;
namespace Microsoft.AspNetCore.Routing.FunctionalTests
{
@ -79,14 +80,21 @@ namespace Microsoft.AspNetCore.Routing.FunctionalTests
public async Task UseRouter_MapGet_MatchesRequest(Action<IRouteBuilder> routeBuilder, HttpRequestMessage request, string expected)
{
// Arrange
var webhostbuilder = new WebHostBuilder();
webhostbuilder
.ConfigureServices(services => services.AddRouting())
.Configure(app =>
using var host = new HostBuilder()
.ConfigureWebHost(webhostbuilder =>
{
app.UseRouter(routeBuilder);
});
var testServer = new TestServer(webhostbuilder);
webhostbuilder
.Configure(app =>
{
app.UseRouter(routeBuilder);
})
.UseTestServer();
})
.ConfigureServices(services => services.AddRouting())
.Build();
var testServer = host.GetTestServer();
await host.StartAsync();
var client = testServer.CreateClient();
// Act

View File

@ -8,6 +8,7 @@
<!--These references are used when running locally-->
<ItemGroup Condition="'$(UseP2PReferences)'=='true'">
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.AspNetCore.Routing" />
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />
<Reference Include="Microsoft.Extensions.Configuration.CommandLine" />

View File

@ -1,20 +1,23 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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 System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
namespace Benchmarks
{
public class Program
{
public static void Main(string[] args)
public static Task Main(string[] args)
{
GetWebHostBuilder(args).Build().Run();
return GetHostBuilder(args).Build().RunAsync();
}
public static IWebHostBuilder GetWebHostBuilder(string[] args)
public static IHostBuilder GetHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.AddCommandLine(args)
@ -24,22 +27,35 @@ namespace Benchmarks
// Consoler logger has a major impact on perf results, so do not use
// default builder.
var webHostBuilder = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel();
var hostBuilder = new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel()
.UseTestServer()
.UseConfiguration(config);
});
var scenario = config["scenarios"]?.ToLower();
if (scenario == "plaintextdispatcher" || scenario == "plaintextendpointrouting")
{
webHostBuilder.UseStartup<StartupUsingEndpointRouting>();
// for testing
webHostBuilder.UseSetting("Startup", nameof(StartupUsingEndpointRouting));
hostBuilder.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseStartup<StartupUsingEndpointRouting>()
// for testing
.UseSetting("Startup", nameof(StartupUsingEndpointRouting));
});
}
else if (scenario == "plaintextrouting" || scenario == "plaintextrouter")
{
webHostBuilder.UseStartup<StartupUsingRouter>();
// for testing
webHostBuilder.UseSetting("Startup", nameof(StartupUsingRouter));
hostBuilder.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseStartup<StartupUsingRouter>()
// for testing
.UseSetting("Startup", nameof(StartupUsingRouter));
});
}
else
{
@ -47,7 +63,7 @@ namespace Benchmarks
$"Invalid scenario '{scenario}'. Allowed scenarios are PlaintextEndpointRouting and PlaintextRouter");
}
return webHostBuilder;
return hostBuilder;
}
}
}

View File

@ -2,8 +2,11 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace RoutingSandbox
@ -13,14 +16,14 @@ namespace RoutingSandbox
public const string EndpointRoutingScenario = "endpointrouting";
public const string RouterScenario = "router";
public static void Main(string[] args)
public static Task Main(string[] args)
{
var webHost = GetWebHostBuilder(args).Build();
webHost.Run();
var host = GetHostBuilder(args).Build();
return host.RunAsync();
}
// For unit testing
public static IWebHostBuilder GetWebHostBuilder(string[] args)
public static IHostBuilder GetHostBuilder(string[] args)
{
string scenario;
if (args.Length == 0)
@ -57,16 +60,20 @@ namespace RoutingSandbox
}
return new WebHostBuilder()
.UseKestrel()
.UseIISIntegration()
return new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel()
.UseIISIntegration()
.UseContentRoot(Environment.CurrentDirectory)
.UseStartup(startupType);
})
.ConfigureLogging(b =>
{
b.AddConsole();
b.SetMinimumLevel(LogLevel.Critical);
})
.UseContentRoot(Environment.CurrentDirectory)
.UseStartup(startupType);
});
}
}
}

View File

@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.AspNetCore.Routing" />
<Reference Include="Microsoft.AspNetCore.Server.IISIntegration" />
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />

View File

@ -1,9 +1,12 @@
// Copyright (c) .NET Foundation. All rights reserved.
// 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 System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace RoutingWebSite
@ -13,14 +16,14 @@ namespace RoutingWebSite
public const string EndpointRoutingScenario = "endpointrouting";
public const string RouterScenario = "router";
public static void Main(string[] args)
public static Task Main(string[] args)
{
var webHost = GetWebHostBuilder(args).Build();
webHost.Run();
var host = GetHostBuilder(args).Build();
return host.RunAsync();
}
// For unit testing
public static IWebHostBuilder GetWebHostBuilder(string[] args)
public static IHostBuilder GetHostBuilder(string[] args)
{
string scenario;
if (args.Length == 0)
@ -57,16 +60,21 @@ namespace RoutingWebSite
}
return new WebHostBuilder()
.UseKestrel()
.UseIISIntegration()
return new HostBuilder()
.ConfigureWebHost(webHostBuilder =>
{
webHostBuilder
.UseKestrel()
.UseIISIntegration()
.UseContentRoot(Environment.CurrentDirectory)
.UseStartup(startupType)
.UseTestServer();
})
.ConfigureLogging(b =>
{
b.AddConsole();
b.SetMinimumLevel(LogLevel.Critical);
})
.UseContentRoot(Environment.CurrentDirectory)
.UseStartup(startupType);
});
}
}
}

View File

@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.AspNetCore.TestHost" />
<Reference Include="Microsoft.AspNetCore.Routing" />
<Reference Include="Microsoft.AspNetCore.Server.IISIntegration" />
<Reference Include="Microsoft.AspNetCore.Server.Kestrel" />