Nouvelles fonctionnalités d'ASP.NET Core dans .NET 10

Validasion intégrée pour les API minimales

Dans les versions précédentes, les API minimales n'exécutaient pas automatiquement la validation des données. .NET 10 introduit une validation automatique similaire aux contrôleurs MVC, en utilisant les annotations DataAnnotations.

Exemple avec un DTO utilisateur :

public class CreateProductRequest
{
    [Required(ErrorMessage = "Le nom du produit est obligatoire")]
    public string ProductName { get; set; }

    [Range(0.01, 10000.00, ErrorMessage = "Le prix doit être entre 0.01 et 10000")]
    public decimal UnitPrice { get; set; }
}

Endpoint API minimale :

app.MapPost("/products", (CreateProductRequest request) =>
{
    return Results.Ok(request);
});

Requête invalide :

{
    "unitPrice": 15000.00
}

Réponse automatique :

{
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
    "title": "Erreurs de validation détectées",
    "errors": {
        "ProductName": ["Le nom du produit est obligatoire"],
        "UnitPrice": ["Le prix doit être entre 0.01 et 10000"]
    }
}

Le mécanisme de validation s'exécute pendant la phase de liaison des points de terminaison :

  1. Le corps de la requête est lié au modèle
  2. Les validations DataAnnotations sont appliquées
  3. En cas d'échec → réponse 400 automatique
  4. En cas de succès → exécution du gestionnaire

Support natif des Server-Sent Events (SSE)

.NET 10 ajoute un support intégré pour les SSE via TypedResults.ServerSentEvents, permettant de diffuser des données en temps réel sans WebSocket ou SignalR.

app.MapGet("/live-data", () =>
{
    async IAsyncEnumerable<string> GenerateMetrics()
    {
        var random = new Random();
        while (true)
        {
            yield return $"CPU: {random.Next(0, 100)}%";
            await Task.Delay(1500);
        }
    }

    return TypedResults.ServerSentEvents(GenerateMetrics());
});

Côté client JavaScript :

const metricsStream = new EventSource("/live-data");
metricsStream.onmessage = (event) => {
    console.log("Métriques système:", event.data);
};

Pour des événements typés avec métadonnées :

app.MapGet("/events", () =>
{
    async IAsyncEnumerable<SseItem<string>> StreamNotifications()
    {
        while (true)
        {
            yield return new SseItem<string>(
                DateTime.UtcNow.ToString("o"),
                eventType: "heartbeat"
            );
            await Task.Delay(30000);
        }
    }

    return TypedResults.ServerSentEvents(StreamNotifications());
});

Support OpenAPI 3.1

.NET 10 adopte la spécificaiton OpenAPI 3.1, offrant une compatibilité améliorée avec les outils modernes et les pipelines CI/CD.

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();

var app = builder.Build();

app.MapGet("/inventory", () =>
{
    return new[]
    {
        new { Sku = "A1", Quantity = 150 },
        new { Sku = "B2", Quantity = 42 }
    };
});

app.MapOpenApi();
app.Run();

La documentasion est accessible à /openapi/v1.json. La sortie YAML est également supportée :

builder.Services.AddOpenApi(options =>
{
    options.AddDocumentTransformer((document, context, token) =>
    {
        document.Info.Title = "API d'inventaire";
        document.Info.Version = "v2";
        document.Info.Description = "Gestion des stocks en temps réel";
        return Task.CompletedTask;
    });
});

Ces fonctionnalités facilitent l'intégration avec les plateformes cloud, les passerelles API et les agents d'IA qui utilisent OpenAPI comme schéma de description.

Étiquettes: ASP.NET Core API Minimales Server-Sent Events OpenAPI 3.1 .NET 10

Publié le 13 juin à 05h47