</>
Plan du cours — 20/46

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);
});