ASP .NET Core 6 - Criando Minimal APIs - II
Hoje vamos continuar apresentando o novo recurso para criação de Minimal APIs disponível a partir do .NET 6.0 para projetos ASP .NET Core 6. |
Continuando o artigo anterior vamos continuar a mostrar como usar outros recursos nas Minimal APIs da ASP .NET Core 6.
Vamos continuar usando o projeto MinAPI criado no artigo anterior no Visual Studio 2022.
Usando a Injeção de dependência nativa
Em diversos projetos vamos precisar lidar com dependências de middlewares e podemos fazer isso no arquivo Program pois não temos nenhum arquivo de inicialização pronto com a nossa API.
Quando criamos um WebApplicationBuilder temos acesso aos recursos de IServiceCollection e podemos assim registrar serviços. Para mostrar isso vamos criar um serviço bem simples e usá-lo em nosso projeto MinApi.
A seguir vamos alterar o código do arquivo Program para:
Neste código fizemos o seguinte:
1- Incluímos uma classe TesteService com o método BoasVindas para exibir o texto 'Bem-Vindo ' seguido do nome que será recebido como parâmetro na URL;
2- Registramos o serviço usando o tempo de vida AddSingleton incluindo TesteService como uma dependência na coleção de serviços;
3- Alteramos o endpoint da API para injetar no HttpContext o serviço TesteService e usamos isso para gerar uma resposta que deverá ser : 'Bem-VIndo {nome}".
Executando novamente o projeto e informando o parâmetro nome na URL teremos o resultado abaixo:
Trabalhando com o Entity Framework Core
É claro que para trabalhar com banco de dados no mundo real poderemos usar os recursos do Entity Framework Core nas Minimal APIs.
A primeira coisa a fazer e incluir o pacote do EF Core para o banco de dados que deseja usar.
Para este exemplo eu vou usar o pacote Microsoft.EntityFrameworkCore.InMemory para trabalhar com os dados na memória.
Assim no Visual Studio 2022 no menu Tools acione - Manage Nuget Packages for Solution - e na guia Browse informe o pacote que vamos instalar (marque a caixa - include prerelease) e selecione o pacote para a versão rc.1.21452.10 :
Com o pacote incluído vamos alterar o código do arquivo Program para:
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase("Clientes"));
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseSwagger();
app.MapGet("/Clientes/{id}", async (int id, AppDbContext dbContext) =>
await dbContext.Clientes.FirstOrDefaultAsync(a => a.Id == id));
app.MapPost("/Clientes", async (Cliente cliente, AppDbContext dbContext) =>
{
dbContext.Clientes.Add(cliente);
await dbContext.SaveChangesAsync();
return cliente;
});
app.MapPut("/Clientes/{id}", async (int id, Cliente cliente, AppDbContext dbContext) =>
{
dbContext.Entry(cliente).State = EntityState.Modified;
await dbContext.SaveChangesAsync();
return cliente;
});
app.MapDelete("/Clientes/{id}", async (int id, AppDbContext dbContext) =>
{
var cliente = await dbContext.Clientes.FirstOrDefaultAsync(a => a.Id == id);
if (cliente != null)
{
dbContext.Clientes.Remove(cliente);
await dbContext.SaveChangesAsync();
}
return;
});
app.UseSwaggerUI();
await app.RunAsync();
public class Cliente
{
public int Id { get; set; }
public string? Nome { get; set; }
}
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options) : base(options)
{
}
public DbSet<Cliente>? Clientes { get; set; }
}
|
Entendendo o código:
1- Criamos a classe Cliente com duas propriedades;
2- Criamos a classe de Contexto AppDbContext definindo o mapeamento para Clientes;
3- Registramos o contexto como um serviço usando o método AddDbContext onde definimos o banco Clientes na memória;
4- Criamos os endpoints para incluir, consultar, alterar e excluir usando o mapeamento MapGet, MapPost, MapPut e MapDelete;
Executando o projeto e acionando /swagger no navegador teremos o resultado abaixo:
Com isso poderemos realizar o CRUD básico usando as Minimal APIs com o EF Core.
Pegue o projeto exemplo aqui: MinApi2.zip (sem as referências)
"Bem-aventurado
o homem que sofre a tentação; porque, quando for provado, receberá a coroa da
vida, a qual o Senhor tem prometido aos que o amam."
Tiago 1:12
Referências:
NET 6 - Global Using : Usando o modificador global na diretiva using