Microsoft ASP.NET Core 6, доступный для производственного использования с 8 ноября, представляет упрощенную модель хостинга, которая сокращает количество шаблонного кода, который в противном случае вам пришлось бы писать для запуска и запуска вашего приложения ASP.NET Core. ASP.NET Core 6 немного упрощает создание нового веб-приложения с нуля по сравнению с ASP.NET Core 5.
Но что, если вы хотите обновить проект ASP.NET Core 5 до ASP.NET Core 6? В этом случае вам следует знать код, который вам нужно будет написать для миграции кода ASP.NET Core 5 на ASP.NET Core 6. В этой статье представлено несколько примеров кода, показывающих, как это можно сделать.
Для работы с примерами кода, представленными в этой статье, в вашей системе должна быть установлена Visual Studio 2022. Если у вас еще нет копии, вы можете скачать Visual Studio 2022 здесь.
Создайте проект веб-API ASP.NET Core в Visual Studio 2022.
Прежде всего давайте создадим проект ASP.NET Core в Visual Studio 2022. Выполнение этих шагов позволит создать новый проект ASP.NET Core Web API 6 в Visual Studio 2022:
- Запустите интегрированную среду разработки Visual Studio 2022.
- Нажмите «Создать новый проект».
- В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
- Нажмите “Далее.
- В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
- При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
- Нажмите “Далее.
- В показанном далее окне «Дополнительная информация» убедитесь, что установлен флажок «Использовать контроллеры…», поскольку в этом примере мы будем использовать контроллеры вместо минимальных API. Оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию).
- Убедитесь, что флажки «Включить Docker», «Настроить HTTPS» и «Включить поддержку Open API» сняты, поскольку мы не будем здесь использовать ни одну из этих функций.
- Нажмите Создать.
Мы будем использовать этот проект веб-API ASP.NET Core 6, чтобы проиллюстрировать миграцию кода ASP.NET Core 5 в ASP.NET Core 6 в последующих разделах этой статьи.
Класс Program в ASP.NET Core 5.
Следующий фрагмент кода иллюстрирует, как выглядит типичный класс Program в ASP.NET Core 5.
public class Program
{
public static void Main(string[] args) {
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) {
return Host.CreateDefaultBuilder(args).
ConfigureWebHostDefaults(x => x.UseStartup <Startup> ());
}
}
Класс Program в ASP.NET Core 6.
С появлением упрощенной модели размещения в ASP.NET Core 6 вам больше не нужно использовать класс Startup. Подробнее об этом можно прочитать в моей предыдущей статье здесь. Вот как можно написать типичный класс программы в ASP.NET Core 6:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline
app.UseAuthorization();
app.MapControllers();
app.Run();
Добавьте промежуточное программное обеспечение в ASP.NET Core 5.
В следующем фрагменте кода показано, как можно добавить компонент промежуточного программного обеспечения в ASP.NET Core 5. В нашем примере мы добавим промежуточное программное обеспечение для сжатия ответов.
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseResponseCompression();
}
}
Добавьте промежуточное ПО в ASP.NET Core 6.
Чтобы добавить компонент промежуточного программного обеспечения в ASP.NET Core 6, вы можете использовать следующий код.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseResponseCompression();
app.Run();
Добавьте маршрутизацию в ASP.NET Core 5.
Чтобы добавить конечную точку в ASP.NET Core 5, вы можете использовать следующий код.
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/test", () => "This is a test message.");
});
}
}
Добавьте маршрутизацию в ASP.NET Core 6.
Вы можете добавить конечную точку в ASP.NET Core 6, используя следующий код.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/test", () => "This is a test message.");
app.Run();
Обратите внимание, что в ASP.NET Core 6 вы можете добавлять конечные точки в WebApplication без необходимости явных вызовов методов расширения UseRouting или UseEndpoints.
Добавление служб в ASP.NET Core 5
В следующем фрагменте кода показано, как можно добавлять службы в контейнер в ASP.NET Core 5.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add built-in services
services.AddMemoryCache();
services.AddRazorPages();
services.AddControllersWithViews();
// Add a custom service
services.AddScoped<IProductRepository, ProductRepository>();
}
}
Добавление служб в ASP.NET Core 6
Чтобы добавить службы в контейнер в ASP.NET Core 6, вы можете использовать следующий код.
var builder = WebApplication.CreateBuilder(args);
// Add built-in services
builder.Services.AddMemoryCache();
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
// Add a custom service
builder.Services.AddScoped<IProductRepository, ProductRepository>();
var app = builder.Build();
Тестирование приложения ASP.NET Core 5 или ASP.NET Core 6.
Вы можете протестировать приложение ASP.NET Core 5 с помощью TestServer или WebApplicationFactory. Чтобы протестировать использование TestServer в ASP.NET Core 5, вы можете использовать следующий фрагмент кода.
[Fact]
public async Task GetProductsTest()
{
using var host = Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(builder =>
{
builder.UseTestServer()
.UseStartup<WebApplication1.Startup>();
})
.ConfigureServices(services =>
{
services.AddSingleton<IProductService, MockProductService>();
})
.Build();
await host.StartAsync();
var client = host.GetTestClient();
var response = await client.GetStringAsync("/getproducts");
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
В следующем фрагменте кода показано, как можно протестировать приложение ASP.NET Core 5 с помощью WebApplicationFactory.
[Fact]
public async Task GetProductsTest()
{
var application = new WebApplicationFactory<Program>()
.WithWebHostBuilder(builder =>
{
builder.ConfigureServices(services =>
{
services.AddSingleton<IProductService, MockProductService>();
});
});
var client = application.CreateClient();
var response = await client.GetStringAsync("/getproducts");
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
Вы можете использовать один и тот же код для тестирования с помощью TestServer или WebApplicationFactory в .NET 5 и .NET 6.
Добавьте поставщика журналов в ASP.NET Core 5.
Поставщики журналов в ASP.NET Core используются для хранения журналов. Поставщиками ведения журнала по умолчанию, включенными в ASP.NET Core, являются поставщики ведения журнала Debug, Console, EventLog и EventSource.
Вы можете использовать метод ClearProviders, чтобы очистить всех поставщиков журналов и добавить конкретного поставщика журналов или собственного настраиваемого поставщика журналов. В следующем фрагменте кода показано, как можно удалить все экземпляры ILoggerProvider и добавить поставщика ведения журнала консоли в ASP.NET Core 5.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>{
webBuilder.UseStartup<Startup>();
});
Добавьте поставщика журналов в ASP.NET Core 6.
В ASP.NET Core 6 при вызове WebApplication.CreateBuilder добавляются поставщики ведения журналов Console, Debug, EventLog и EventSource. В следующем фрагменте кода показано, как можно очистить поставщиков ведения журнала по умолчанию и добавить только поставщика ведения журнала консоли в ASP.NET Core 6.
var builder = WebApplication.CreateBuilder(args);
//Clear default logging providers
builder.Logging.ClearProviders();
//Code to add services to the container
builder.Logging.AddConsole();
var app = builder.Build();
Приведенные здесь примеры кода иллюстрируют различные способы добавления поставщиков промежуточного программного обеспечения, маршрутизации, служб и журналирования в ASP.NET Core 5 и ASP.NET Core 6, а также различия в классе Program и тестировании. Эти фрагменты должны помочь вам при работе с приложениями ASP.NET Core 6 и дать вам хороший старт при переносе приложений ASP.NET Core 5 в ASP.NET Core 6.