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:


José Carlos Macoratti