NET 6 - Migrando para ASP .NET Core 6 - II
Hoje vou continuar a apresentar um roteiro básico de migração para ASP .NET Core no NET 6. |
Continuando o artigo anterior veremos o código de migração necessário para realizar algumas tarefas que foram afetadas pelos novos recursos do .NET 6.
1- Incluindo um middleware
.NET 5
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
}
}
|
.NET 6
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.UseStaticFiles(); app.Run(); |
2- Adicionar novas rotas
.NET 5
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", () => "Hello World");
});
}
}
|
.NET 6
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World");
app.Run();
|
No .NET 6, as rotas podem ser adicionadas diretamente ao aplicativo Web sem uma chamada explícita para UseEndpoints.
As rotas adicionadas diretamente ao aplicativo Web serão executadas no final do pipeline.
3- Alterar a raiz do conteúdo, o nome do aplicativo e o ambiente
.NET 5
public static
IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args) .UseContentRoot(Directory.GetCurrentDirectory()) .UseEnvironment(Environments.Staging) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseSetting(WebHostDefaults.ApplicationKey, typeof(Program).Assembly.FullName); }); |
.NET 6
var builder = WebApplication.CreateBuilder(new WebApplicationOptions { ApplicationName = typeof(Program).Assembly.FullName, ContentRootPath = Directory.GetCurrentDirectory(), EnvironmentName = Environments.Staging }); Console.WriteLine($"Application Name: {builder.Environment.ApplicationName}"); Console.WriteLine($"Environment Name: {builder.Environment.EnvironmentName}"); Console.WriteLine($"ContentRoot Path: {builder.Environment.ContentRootPath}"); var app = builder.Build(); |
4- Adicionar provedores de configuração
.NET 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
{
config.AddIniFile("appsettings.ini");
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
|
.NET 6
var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddIniFile("appsettings.ini"); var app = builder.Build(); |
5- Adicionar provedores de logging
.NET 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.AddJsonConsole(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); |
.NET 6
var builder = WebApplication.CreateBuilder(args); // Configure JSON logging para o console builder.Logging.AddJsonConsole(); var app = builder.Build(); |
6- Adicionar novos serviços
.NET 5
public class Startup { public void ConfigureServices(IServiceCollection services) { // Adiciona o serviço memory cache services.AddMemoryCache(); // Adiciona um serviço customizado services.AddScoped<ITodoRepository, TodoRepository>(); } } |
.NET 6
var builder = WebApplication.CreateBuilder(args); // Adiciona o serviço memory cache builder.Services.AddMemoryCache(); // Adiciona um serviço customizado builder.Services.AddScoped<ITodoRepository, TodoRepository>(); var app = builder.Build(); |
7- Customizando o IHostBuilder
.NET 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
|
Os métodos de extensão existentes no IHostBuilder podem ser acessados usando a propriedade Host..
.NET 6
var builder = WebApplication.CreateBuilder(args); // Aguarda 30 seegundos para shutdown builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30)); var app = builder.Build(); |
8- Customizando o IWebHostBuilder
.NET 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// altera a implementação de HTTP server para ser baseada em HTTP.sys
webBuilder.UseHttpSys()
.UseStartup<Startup>();
});
|
Os métodos de extensão existentes no IWebHostBuilder podem ser acessados usando a propriedade WebHost.
.NET 6
var builder = WebApplication.CreateBuilder(args); // altera a implementação de HTTP server para ser baseada em HTTP.sys builder.WebHost.UseHttpSys(); var app = builder.Build(); |
9- Alterando a raiz da web
Por padrão, a raiz da web é relativa à raiz do conteúdo na pasta wwwroot. É aqui que o middleware de arquivos estáticos espera encontrar arquivos estáticos. Você pode alterar isso usando o método UseWebRoot na propriedade WebHost:
.NET 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// Procura arquivos estaticos em webroot
webBuilder.UseWebRoot("webroot")
.UseStartup<Startup>();
});
|
.NET 6
var builder = WebApplication.CreateBuilder(args); // Procura arquivos estaticos em webroot builder.WebHost.UseWebRoot("webroot"); var app = builder.Build(); |
10- Acessando serviços adicionais
No método Startup.Configure você pode injetar qualquer serviço adicionado via IServiceCollection.
.NET 5
public class Startup
{
// Use este método para adicionar serviços no contiainer.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IService, Service>();
}
// Qualquer coisa adicionada à coleção de serviço pode ser injetada no Configure
public void Configure(IApplicationBuilder app,
IWebHostEnvironment env,
IHostApplicationLifetime lifetime,
IService service,
ILogger<Startup> logger)
{
lifetime.ApplicationStarted.Register(() =>
logger.LogInformation($"A aplicação {env.ApplicationName} iniciou no serviço {service}"));
}
}
|
.NET 6
No .NET 6, existem alguns serviços comuns disponíveis como propriedades de nível superior em WebApplication e serviços adicionais precisam ser resolvidos manualmente no IServiceProvider por meio de WebApplication.Services.
var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton<IService, Service>(); var app = builder.Build(); IService service = app.Services.GetRequiredService<IService>(); ILogger logger = app.Logger; IHostApplicationLifetime lifetime = app.Lifetime; IWebHostEnvironment env = app.Environment; lifetime.ApplicationStarted.Register(() => logger.LogInformation($"A aplicação {env.ApplicationName} iniciou no serviço {service}")); app.Run(); |
E estamos conversados...
"Quando eu disse: O meu pé vacila; a tua
benignidade, Senhor, me susteve."
Salmos 94:18
Referências:
C# - Lendo e escrevendo em arquivos textos e binários
Conceitos - .NET Framework versus .NET Core
ASP .NET Core - Conceitos Básicos - Macoratti.net
ASP .NET Core MVC - CRUD básico com ADO .NET
ASP .NET Core - Implementando a segurança com ...
ASP .NET Core - Apresentando Razor Pages
NET 6 - Global Using : Usando o modificador global na diretiva using