Как перенести код ASP.NET Core 5 в ASP.NET Core 6

автор vadim


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:

  1. Запустите интегрированную среду разработки Visual Studio 2022.
  2. Нажмите «Создать новый проект».
  3. В окне «Создать новый проект» выберите «ASP.NET Core Web API» из списка отображаемых шаблонов.
  4. Нажмите “Далее.
  5. В окне «Настроить новый проект» укажите имя и местоположение нового проекта.
  6. При желании установите флажок «Поместить решение и проект в один каталог», в зависимости от ваших предпочтений.
  7. Нажмите “Далее.
  8. В показанном далее окне «Дополнительная информация» убедитесь, что установлен флажок «Использовать контроллеры…», поскольку в этом примере мы будем использовать контроллеры вместо минимальных API. Оставьте для параметра «Тип аутентификации» значение «Нет» (по умолчанию).
  9. Убедитесь, что флажки «Включить Docker», «Настроить HTTPS» и «Включить поддержку Open API» сняты, поскольку мы не будем здесь использовать ни одну из этих функций.
  10. Нажмите Создать.

Мы будем использовать этот проект веб-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.

Related Posts

Оставить комментарий