O .NET Core é o runtime multiplataforma e open-source da Microsoft para construir APIs web, serviços em background e aplicativos de console. Esta referência cobre os padrões que aparecem em aplicações reais de produção.
TL;DR: Uma referência .NET Core cobrindo APIs web, injeção de dependências, Entity Framework Core, autenticação com JWT e deploy no Azure.
Stack: .NET Core, C#, ASP.NET Core, Entity Framework Core
Nível: Intermediário
Tempo de leitura: ~30 min
Criar projeto e roteamento básico
dotnet new web
// Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Olá Mundo");
app.MapGet("/produto/{id}", ([FromRoute] int id) => Results.Ok(id));
app.MapPost("/produto", (Product p) => Results.Created($"/produto/{p.Id}", p));
app.Run();
Configuração
// appsettings.json
{
"Database": {
"Connection": "Server=localhost;Database=Products;User Id=sa;Password=suaSenha"
}
}
// Lendo no código
var conn = builder.Configuration["Database:Connection"];
Entity Framework Core
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
// DbContext
public class ApplicationDbContext : DbContext {
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options) {
options.UseSqlServer("sua-connection-string");
}
protected override void OnModelCreating(ModelBuilder builder) {
builder.Entity<Product>().Property(p => p.Name).HasMaxLength(500);
}
}
builder.Services.AddDbContext<ApplicationDbContext>();
Migrations
dotnet tool install --global dotnet-ef
dotnet ef migrations add CriacaoInicial
dotnet ef database update
# Reverter para migration específica
dotnet ef database update NomeDaMigration
Autenticação JWT
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
// Setup no Program.cs
builder.Services.AddAuthentication(x => {
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters() {
ValidateAudience = true,
ValidateIssuer = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["JwtSettings:Issuer"],
ValidAudience = builder.Configuration["JwtSettings:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["JwtSettings:SecretKey"]))
};
});
Dapper para consultas avançadas
dotnet add package Dapper
var db = new SqlConnection(configuration["Database:Connection"]);
var usuarios = db.Query<UserResponse>(
"SELECT Email, Name FROM Users ORDER BY Name OFFSET (@page-1)*@rows ROWS FETCH NEXT @rows ROWS ONLY",
new { page, rows }
);
Azure Functions
Azure Functions são recursos serverless no Azure que podem ser disparados por requisições HTTP, timers, filas e Event Grid. Importante: por padrão, todos os recursos do Azure usam timezone UTC. Para o Brasil, adicione WEBSITE_TIME_ZONE = “E. South America Standard Time” na configuração do function app para evitar timestamps 3 horas adiantados.
O que você tem
Uma referência .NET Core cobrindo a stack completa: configuração de API web com minimal API, acesso ao banco com Entity Framework Core, migrations, autenticação JWT com Identity e Dapper para consultas complexas.
Próximos passos
- Use o container de injeção de dependências embutido desde o início. Injeção via construtor mantém o código testável e evita estado global.
- Commit as migrations do EF Core no controle de versão e nunca modifique o banco de produção manualmente.
- Use IOptions para binding de configuração em classes fortemente tipadas, em vez de ler IConfiguration diretamente fora do código de inicialização.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.