Configuration (appsettings.json)
Intermédiaire{
"ConnectionStrings": {
"Default": "Server=localhost;Database=MonApp;Trusted_Connection=True;"
},
"Smtp": {
"Host": "smtp.example.com",
"Port": 587
}
}
// Lecture directe
var connexion = builder.Configuration.GetConnectionString("Default");
// Options pattern (recommandé) : typé + validable + rechargeable à chaud
public class SmtpOptions
{
public string Host { get; set; } = "";
public int Port { get; set; }
}
builder.Services.Configure<SmtpOptions>(builder.Configuration.GetSection("Smtp"));
app.MapGet("/smtp-config", (IOptions<SmtpOptions> options) => options.Value);
appsettings.Development.json surcharge appsettings.json uniquement en environnement de développement (variable ASPNETCORE_ENVIRONMENT=Development).
Cas pratique : endpoint CRUD complet avec DI, validation basique et codes de retour corrects.
app.MapPost("/utilisateurs", async (CreerUtilisateurDto dto, IUtilisateurRepository repo) => { if (string.IsNullOrWhiteSpace(dto.Email)) return Results.BadRequest("L'email est obligatoire."); var u = await repo.CreerAsync(dto.Nom, dto.Email); return Results.Created($"/utilisateurs/{u.Id}", u); });