Aller au contenu
.Net Livre
Rechercher
Ctrl
K
Annuler
GitHub
Selectionner la langue
English
Français
1 - Introduction Comprendre C#, .NET et votre premier environnement
1.1 Qu’est-ce que .NET
1.1.1 .NET Framework Windows seulement hérité
1.1.2 .NET Core multiplateforme moderne
1.1.3 .NET 5, 6, 7, 8 plateforme unifiée
1.1.4 .NET Standard contrat de compatibilité API
1.2 Installer le SDK .NET
1.2.1 Télécharger depuis dotnet.microsoft.com
1.2.2 Vérifier l’installation avec dotnet info
1.2.3 SDK vs Runtime
1.3 Structure d’un projet
1.3.1 Fichier csproj format XML références de paquets
1.3.2 Program.cs point d’entrée
1.3.3 Appsettings.JSON configuration
1.3.4 Dossiers obj et bin
1.4 L’interface de ligne de commande dotnet
1.4.1 Dotnet new créer un projet à partir d’un modèle
1.4.2 Dotnet build compiler
1.4.3 Dotnet run compiler et exécuter
1.4.4 Dotnet test exécuter les tests unitaires
1.4.5 Dotnet publish produire une sortie déployable
1.5 Instructions de niveau supérieur C# 9 et ultérieur
1.5.1 Pas de méthode Main explicite
1.5.2 Directives using implicites
1.5.3 Quand utiliser vs Main traditionnel
1.6 Votre première application console Bonjour le monde
1.6.1 Créer le projet dotnet new console n HelloWorld
1.6.2 ÉCrire Console.WriteLine Bonjour le monde
1.6.3 Exécuter et observer la sortie
1.7 Projet Outil de salutation en ligne de commande
1.7.1 Idée : demander le nom et la couleur préférée, afficher un message
1.7.2 Structure de dossiers GreetingTool Program.cs
1.7.3 ÉTapes : demander le nom, demander la couleur, afficher un message personnalisé
2 - Types primitifs et syntaxe de base
2.1 Types valeur
2.1.1 Types entiers
2.2 Types référence
2.2.1 String
2.2.2 Object
2.2.3 Dynamic
2.3 Variables et constantes
2.3.1 Déclaration type nomVariable
2.3.2 Initialisation int x = 5
2.3.3 Inférence de type avec var
2.3.4 Constantes const double Pi = 3.14
2.3.5 Champs readonly
2.4 Interpolation de chaînes
2.4.1 Syntaxe Bonjour nom
2.4.2 Mise en forme valeur format
2.4.3 Séquences d’échappement pour accolade littérale
2.5 Entrées-sorties basiques
2.5.1 Console.WriteLine ligne
2.5.2 Console.Write sans saut de ligne
2.5.3 Console.ReadLine retourne une chaîne
2.5.4 Console.ReadKey un seul caractère
2.6 Conversion de types
2.6.1 Conversion implicite
2.6.2 Conversion explicite
2.6.3 Classe Convert
2.6.4 Parse et TryParse
2.7 Projet Calculatrice simple
3 - Flux de contrôle et opérateurs
3.1 Instructions conditionnelles
3.1.1 If
3.1.2 Else if enchaîné
3.1.3 Else
3.1.4 If imbriqué
3.2 Instruction switch
3.2.1 Switch avec motifs constants
3.2.2 Switch avec critères de correspondance C# 7 et ultérieur
3.2.3 Gardes when
3.2.4 Goto case rare
3.3 Expressions switch C# 8 et ultérieur
3.3.1 Syntaxe
3.3.2 Modèle d’abandon
3.4 Boucles
3.4.1 For
3.4.2 Foreach
3.4.3 While
3.4.4 Do while
3.5 Contrôle de boucle
3.5.1 Break
3.5.2 Continue
3.5.3 Return
3.5.4 Goto à éviter
3.6 Opérateurs
3.6.1 Arithmétiques
3.6.2 Assignation
3.6.3 Logiques
3.6.4 Comparaison
3.6.5 Null coalescing
3.6.6 Null conditionnel
3.6.7 Ternaire
3.6.8 Binaires
3.7 Projet Jeu du nombre mystère
4 - Programmation orientée objet (POO) en profondeur
4.1 Classes et objets
4.1.1 Définition d’une classe
4.1.2 Instanciation
4.1.3 Champs
4.1.4 Propriétés
4.1.5 Méthodes
4.2 Encapsulation
4.2.1 Modificateurs d’accès
4.2.2 Accesseurs de propriétés
4.2.3 Propriétés auto-implémentées
4.3 Héritage
4.3.1 Classe de base et classe dérivée
4.3.2 Mot-clé base
4.3.3 Classes sealed
4.3.4 Méthodes virtual et override
4.3.5 Classes et méthodes abstract
4.3.6 Masquer des membres avec new
4.4 Polymorphisme
4.4.1 Polymorphisme à la compilation (surcharge)
4.4.2 Polymorphisme à l’exécution (virtual/override)
4.4.3 Opérateurs is et as
4.5 Interfaces
4.5.1 Définition d’une interface
4.5.2 Implémenter une interface
4.5.3 Implémentation explicite d’interface
4.5.4 Méthodes d’interface par défaut C# 8 et ultérieur
4.6 Classes et membres static
4.6.1 Champs, méthodes, propriétés static
4.6.2 Constructeur static
4.6.3 Classe static ne peut pas être instanciée
4.7 Projet Système de gestion de bibliothèque (console)
5 - Patrons de conception pour le développement backend
5.1 Patrons de création
5.1.1 Fabrique (Factory Method)
5.1.2 Fabrique abstraite (Abstract Factory)
5.1.3 Singleton
5.1.4 Monteur (Builder)
5.1.5 Prototype
5.2 Patrons structurels
5.2.1 Adaptateur (Adapter)
5.2.2 Proxy
5.2.3 Décorateur (Decorator)
5.2.4 Façade (Facade)
5.2.5 Pont (Bridge)
5.2.6 Composite
5.2.7 Poids-mouche (Flyweight)
5.3 Patrons comportementaux
5.3.1 Stratégie (Strategy)
5.3.2 Commande (Command)
5.3.3 Observateur (Observer)
5.3.4 Chaîne de responsabilité (Chain of Responsibility)
5.3.5 Médiateur (Mediator)
5.3.6 Memento
5.3.7 ÉTat (State)
5.3.8 Patron Méthode (Template Method)
5.3.9 Visiteur (Visitor)
5.4 Patrons architecturaux pour le backend
5.4.1 Dépôt (Repository)
5.4.2 Middleware
5.4.3 Injection de dépendances
5.5 Projet Système de remise avec le patron Stratégie
6 - Système de types avancé
6.1 Enregistrements (Records)
6.1.1 Record class
6.1.2 Record struct
6.1.3 Enregistrements positionnels
6.1.4 Expressions with
6.1.5 ÉGalité basée sur la valeur
6.2 Structures (struct)
6.2.1 Struct
6.2.2 Readonly struct
6.2.3 Ref struct
6.2.4 Quand utiliser struct vs class
6.3 ÉNumérations (enum)
6.3.1 Définition d’une enum
6.3.2 Type sous-jacent
6.3.3 Enum avec attribut Flags
6.3.4 Enum.Parse et Enum.GetValues
6.4 Types référence Nullable C# 8 et ultérieur
6.4.1 String? référence nullable
6.4.2 Contexte d’annotation nullable
6.4.3 Opérateur de suppression de null
6.4.4 Avertissements de nullabilité
6.5 Filtrage (Pattern matching)
6.5.1 Motif constant
6.5.2 Motif de type
6.5.3 Motif de propriété
6.5.4 Motif positionnel
6.5.5 Motif de liste C# 11
6.5.6 Motif var
6.6 Projet Enregistrement Personne immuable avec validation
7 - Délégués, événements et expressions lambda
7.1 Délégués
7.1.1 Déclaration
7.1.2 Instanciation et invocation
7.1.3 Délégués multicast
7.1.4 Délégués génériques Action Func Predicate
7.2 ÉVénements
7.2.1 Mot-clé event
7.2.2 Souscription et désabonnement
7.2.3 Invocation d’événement
7.2.4 Patron standard EventHandler et EventArgs
7.3 Expressions lambda
7.3.1 Syntaxe
7.3.2 Lambdas avec corps d’instructions
7.3.3 Capture de variables externes (fermetures)
7.3.4 Arbres d’expressions
7.4 Fonctions anonymes
7.4.1 Mot-clé delegate avant les lambdas
7.4.2 Comparaison avec les lambdas
7.5 Projet Simulateur de clic de bouton (événement)
8 - LINQ (Language Integrated Query)
8.1 Syntaxe de requête vs syntaxe de méthode
8.1.1 Syntaxe de requête
8.1.2 Syntaxe de méthode
8.1.3 Mélange des deux
8.2 Exécution différée vs immédiate
8.2.1 Opérateurs différés
8.2.2 Opérateurs immédiats
8.2.3 Opérateurs de flux vs tampon
8.3 LINQ to Objects, LINQ to XML, LINQ to Entities
8.3.1 Collections en mémoire
8.3.2 XML
8.3.3 EF Core traduction SQL
8.4 Opérateurs courants
8.4.1 Filtrage
8.4.2 Projection
8.4.3 Tri
8.4.4 Regroupement
8.4.5 Jointure
8.4.6 Agrégation
8.4.7 Opérateurs d’élément
8.4.8 Opérateurs ensemblistes
8.4.9 Quantificateurs
8.4.10 Partitionnement
8.5 Projet Analyse de données employés
9 - Programmation asynchrone (async/await)
9.1 Modèle asynchrone basé sur les tâches (TAP)
9.1.1 Task sans résultat
9.1.2 Task<T> avec résultat
9.1.3 ValueTask et ValueTask<T> pour la performance
9.2 Async et await
9.2.1 Marquer une méthode async
9.2.2 Await extrait le résultat
9.2.3 Transformation par le compilateur en machine à états
9.3 Types de retour des méthodes async
9.3.1 Task pour async void
9.3.2 Task<T> pour retourner une valeur
9.3.3 Void uniquement pour les gestionnaires d’événements (à éviter)
9.4 Flux asynchrones
9.4.1 IAsyncEnumerable<T>
9.4.2 Await foreach
9.4.3 Await using pour disposer de manière asynchrone
9.5 ÉViter async void
9.5.1 Les exceptions ne peuvent pas être capturées
9.5.2 Difficile à tester
9.6 ConfigureAwait(false)
9.6.1 ÉViter de capturer le SynchronizationContext d’origine
9.6.2 Utiliser dans le code de bibliothèque
9.7 Jetons d’annulation
9.7.1 CancellationTokenSource
9.7.2 CancellationToken
9.7.3 ThrowIfCancellationRequested
9.7.4 Annulation coopérative
9.8 Projet Récupérateur de météo asynchrone
10 - Gestion de la mémoire et performance
10.1 Garbage collection (GC)
10.1.1 Générations 0, 1, 2
10.1.2 GC station de travail vs GC serveur
10.1.3 GC d’arrière-plan
10.1.4 Tas des grands objets (LOH)
10.1.5 Objets épinglés
10.2 IDisposable
10.2.1 Ressources non managées
10.2.2 Patron Dispose
10.2.3 Instruction using
10.2.4 Await using et IAsyncDisposable
10.3 Span<T> et Memory<T>
10.3.1 Span<T> réservé à la pile
10.3.2 Memory<T> pour le tas ou l’asynchrone
10.3.3 ArrayPool<T> pour louer des tampons
10.4 Benchmarking
10.4.1 BenchmarkDotNet
10.4.2 Attributs Benchmark et MemoryDiagnoser
10.4.3 Exécuter des benchmarks et éviter les pièges courants
10.5 Projet Comparer concaténation de chaînes vs StringBuilder
11 - Génériques et contraintes
11.1 Classes génériques
11.1.1 Syntaxe
11.1.2 Nom des paramètres de type T, TKey, TValue
11.2 Méthodes génériques
11.2.1 T MaMéthode<T>(T param)
11.2.2 Inférence de type à l’appel
11.3 Interfaces génériques
11.3.1 Interface IRepository<T>
11.3.2 Covariance (out T) et contravariance (in T)
11.4 Contraintes
11.4.1 Where T : struct (type valeur)
11.4.2 Where T : class (type référence)
11.4.3 Where T : new() (constructeur sans paramètre)
11.4.4 Where T : BaseClass (contrainte de classe de base)
11.4.5 Where T : IMyInterface (contrainte d’interface)
11.4.6 Where T : unmanaged (sans références)
11.4.7 Contraintes multiples
11.5 Projet Simulateur de dépôt générique
12 - Exceptions et gestion des erreurs
12.1 Try/catch/finally
12.1.1 Capturer des types d’exception spécifiques
12.1.2 Blocs catch multiples
12.1.3 Finally pour le nettoyage
12.2 Filtres d’exception
12.2.1 Catch avec condition when
12.3 Exceptions personnalisées
12.3.1 Dériver de Exception ou ApplicationException
12.3.2 Constructeur de sérialisation
12.3.3 Ajouter des propriétés personnalisées
12.4 ExceptionDispatchInfo
12.4.1 Capturer et relancer avec la pile d’appels d’origine
12.5 Gestion globale des exceptions
12.5.1 Middleware ASP.NET Core
12.5.2 AppDomain.UnhandledException
12.5.3 TaskScheduler.UnobservedTaskException
12.6 Projet Lecteur de fichier sécurisé avec réessai
13 - Réflexion, attributs et générateurs sources
13.1 Réflexion
13.1.1 Classe Type
13.1.2 Chargement et analyse d’assembly
13.1.3 MemberInfo, MethodInfo, PropertyInfo
13.1.4 Invoquer des méthodes dynamiquement
13.2 Attributs personnalisés
13.2.1 Classe d’attribut avec AttributeUsage
13.2.2 Appliquer des attributs aux cibles
13.2.3 Lire des attributs avec la réflexion
13.3 Générateurs sources
13.3.1 Que sont les générateurs sources ?
13.3.2 Générateurs incrémentaux
13.3.3 Cas d’usage (code à la compilation, performance)
13.3.4 Différence avec la réflexion (aucun coût à l’exécution)
13.4 Projet Moteur de validation basé sur attributs
14 - Fonctionnalités modernes de C# pour le backend
14.1 Accesseurs init uniquement
14.1.1 Objets immuables après construction
14.1.2 Initialiseur d’objet avec init
14.2 Membres required C# 11
14.2.1 Mot-clé required
14.2.2 Le constructeur garantit que les propriétés required sont définies
14.3 Types record (rappel)
14.4 Gestionnaires de chaînes interpolées
14.4.1 Optimisation des performances pour la journalisation
14.4.2 Structure InterpolatedStringHandler
14.5 Attributs d’informations d’appelant
14.5.1 CallerMemberName
14.5.2 CallerArgumentExpression
14.5.3 CallerFilePath et CallerLineNumber
14.6 Projet Aide à la journalisation avec informations d’appelant
15 - Tests et simulation (mocking)
15.1 Frameworks de tests unitaires
15.1.1 XUnit (Fact, Theory, InlineData)
15.1.2 NUnit (Test, TestCase)
15.1.3 MSTest
15.2 Bibliothèques de simulation
15.2.1 Moq (Mock, Setup, Verify)
15.2.2 NSubstitute (Substitute.For<T>())
15.2.3 FakeItEasy
15.3 Doubles de test
15.3.1 Stub
15.3.2 Mock
15.3.3 Fake
15.4 Tests d’intégration
15.4.1 WebApplicationFactory<TStartup>
15.4.2 Base de données en mémoire avec EF Core
15.4.3 HttpClient pour tester les endpoints
15.5 Projet Tester un service de calculatrice avec Moq
16 - Journalisation, diagnostic et configuration
16.1 Journalisation
16.1.1 Interface ILogger<T>
16.1.2 Niveaux de log : Trace, Debug, Information, Warning, Error, Critical
16.1.3 Journalisation structurée avec Serilog, NLog
16.1.4 Enrichissement et destinations (console, fichier, Elasticsearch)
16.2 Configuration
16.2.1 IConfiguration et fournisseurs de configuration
16.2.2 Fichiers JSON (appsettings.JSON)
16.2.3 Variables d’environnement
16.2.4 Secrets utilisateur (développement uniquement)
16.2.5 Arguments de ligne de commande
16.3 Patron Options
16.3.1 IOptions<T> singleton, pas de rechargement
16.3.2 IOptionsSnapshot<T> par portée, rechargement au changement
16.3.3 IOptionsMonitor<T> singleton avec notifications de changement
16.3.4 Configure<T> et PostConfigure
16.4 Projet Application configurable avec Serilog
17 - Injection de dépendances en profondeur
17.1 Durées de vie des services
17.1.1 Singleton (une instance pour toute l’application)
17.1.2 Scoped (une par requête HTTP ou portée)
17.1.3 Transient (nouvelle instance à chaque fois)
17.2 Méthodes d’enregistrement
17.2.1 AddSingleton, AddScoped, AddTransient
17.2.2 Délégués d’usine
17.2.3 Enregistrements génériques ouverts
17.3 Résolution de services
17.3.1 Injection par constructeur (préférée)
17.3.2 IServiceProvider directement
17.3.3 IServiceScopeFactory pour créer des portées
17.4 Patron Décorateur avec DI
17.4.1 Utiliser AddScoped pour envelopper un service
17.4.2 Bibliothèque Scrutor pour les décorateurs
17.5 Projet Démonstrateur de durées de vie DI
18 - Interopérabilité et API bas niveau
18.1 P/Invoke
18.1.1 Attribut DllImport (hérité)
18.1.2 LibraryImport (générateur source, .NET 7 et ultérieur)
18.1.3 Marshalling des chaînes, structures, pointeurs
18.2 Code non vérifié (unsafe)
18.2.1 Contexte unsafe
18.2.2 Pointeurs
18.2.3 Instruction fixed pour épingler des objets managés
18.2.4 Stackalloc pour allouer sur la pile
18.3 Fichiers mappés en mémoire
18.3.1 MemoryMappedFile.CreateFromFile
18.3.2 MemoryMappedViewAccessor
18.4 Classe Marshal
18.4.1 Marshal.AllocHGlobal (mémoire non managée)
18.4.2 Marshal.StructureToPtr
18.4.3 Marshal.PtrToStructure
18.5 Projet Appeler la MessageBox Windows via P/Invoke
19 - Patrons spécifiques au backend
19.1 Pipeline de middleware
19.1.1 Use (court-circuit)
19.1.2 Run (terminal middleware)
19.1.3 Map (branchement)
19.1.4 Ordre des middlewares
19.2 Délégués de requête
19.2.1 Signature RequestDelegate
19.2.2 Middleware inline avec Use
19.3 Middleware personnalisé
19.3.1 Classe avec méthode InvokeAsync
19.3.2 Injection de services (scoped, singleton)
19.3.3 Appeler _next(context)
19.4 Projet Middleware de journalisation des requêtes personnalisé
20 - Qualité de code et outils
20.1 Analyseurs Roslyn
20.1.1 FxCop (hérité) et Microsoft.CodeAnalysis.NetAnalyzers
20.1.2 StyleCop (nommage, mise en page)
20.1.3 SonarAnalyzer (sécurité, bogues)
20.2 Formatage
20.2.1 Fichier editorconfig
20.2.2 Commande dotnet format
20.2.3 Intégration IDE (VS, Rider, VS Code)
20.3 Crochets de pré-commit
20.3.1 Husky.NET ou scripts bash simples
20.3.2 Exécuter dotnet format et dotnet test avant le commit
20.4 Projet Appliquer des normes de codage avec editorconfig
21 - Internals du CLR et diagnostics
21.1 Compilation JIT
21.1.1 Compilation à plusieurs niveaux (Tiered)
21.1.2 ReadyToRun (R2R) précompilation
21.1.3 Cross-gen (fichier unique, Native AOT)
21.2 Outils de diagnostic
21.2.1 Dotnet trace (événements runtime, profilage)
21.2.2 Dotnet dump (analyse du tas, vidages de crash)
21.2.3 Dotnet counters (compteurs de performance)
21.2.4 Dotnet gcdump (instantanés du tas GC)
21.3 ÉCouteurs d’événements
21.3.1 EventSource (événements personnalisés)
21.3.2 EventListener (consommer des événements)
21.3.3 DiagnosticSource (pour l’instrumentation de bibliothèque)
21.4 Projet Collecter les événements GC avec EventListener
22 - Concurrence bas niveau et code sans verrou
22.1 Rappels sur les threads
22.1.1 System.Threading.Thread
22.1.2 ThreadPool
22.1.3 Task comme abstraction de plus haut niveau
22.2 Primitives sans verrou
22.2.1 Classe Interlocked
22.2.2 Volatile (empêcher les optimisations du compilateur)
22.2.3 MemoryBarrier (rarement nécessaire directement)
22.3 Synchronisation légère
22.3.1 SpinLock (quand le verrou est tenu brièvement)
22.3.2 SpinWait (attente hybride)
22.3.3 Lazy<T> avec initialisation thread-safe
22.3.4 LazyInitializer (helpers statiques)
22.4 Collections concurrentes
22.4.1 ConcurrentDictionary<TKey,TValue>
22.4.2 ConcurrentQueue<T>
22.4.3 ConcurrentStack<T>
22.4.4 ConcurrentBag<T>
22.4.5 BlockingCollection<T>
22.4.6 Channel<T> (producteur-consommateur, support asynchrone)
22.5 Projet Compteur thread-safe avec Interlocked
23 - Techniques avancées de test et débogage
23.1 Test instantané (snapshot) avec Verify
23.1.1 Sérialisation de la sortie attendue
23.1.2 Comparaison des différences
23.2 Fuzzing (entrées aléatoires)
23.2.1 FsCheck pour les tests basés sur les propriétés
23.2.2 Générer des valeurs arbitraires
23.2.3 Réduction des contre-exemples
23.3 Débogage avec WinDbg/SOS
23.3.1 Attacher à un processus
23.3.2 Commandes dumpheap et gcroot
23.3.3 Analyser les interblocages, forte utilisation CPU
23.4 Ingénierie du chaos (Chaos engineering)
23.4.1 Simuler des pannes avec Polly (politiques de chaos)
23.4.2 Injection de fautes dans les tests d’intégration
23.5 Projet Test basé sur les propriétés pour un algorithme de tri
24 - API REST en profondeur
24.1 Contrôleurs vs API minimales
24.1.1 Contrôleur (ApiController, Route)
24.1.2 API minimales (MapGet, MapPost)
24.1.3 Compromis (simplicité vs fonctionnalités)
24.2 Routage et liaison de modèles
24.2.1 Routage par attributs
24.2.2 Contraintes de route
24.2.3 From body, query, route, header
24.3 Validation
24.3.1 Annotations de données (Required, MaxLength)
24.3.2 Validation automatique avec ApiController
24.3.3 Attributs de validation personnalisés
24.3.4 FluentValidation (bibliothèque externe)
24.4 Négociation de contenu
24.4.1 En-tête Accept
24.4.2 Attributs Produces et Consumes
24.4.3 Formateurs personnalisés
24.5 Gestion de version d’API
24.5.1 Versionnement par chemin d’URL
24.5.2 Versionnement par chaîne de requête
24.5.3 Versionnement par en-tête
24.5.4 Microsoft.AspNetCore.Mvc.Versioning
24.6 OpenAPI et Swagger
24.6.1 Swashbuckle.AspNetCore
24.6.2 Générer du JSON Swagger
24.6.3 Interface Swagger UI pour les tests
24.6.4 Annotations ProducesResponseType
24.7 Problème Details (RFC 7807)
24.7.1 Classe ProblemDetails
24.7.2 ValidationProblemDetails pour les erreurs
24.7.3 Results.Problem dans les API minimales
24.8 Projet API Todo avec versionnement et OpenAPI
25 - Sécurité des API en profondeur
25.1 CORS
25.1.1 Politique de même origine
25.1.2 Requêtes préliminaires (OPTIONS)
25.1.3 AddCors et UseCors
25.1.4 Origines, méthodes, en-têtes autorisés
25.1.5 Credentials (AllowCredentials)
25.2 Limitation de débit (Rate limiting)
25.2.1 Fenêtre fixe, fenêtre glissante, seau à jetons, concurrence
25.2.2 Intégré à .NET 7 et ultérieur (AddRateLimiter, EnableRateLimiting)
25.2.3 Partitionnement par utilisateur, IP, clé API
25.2.4 Retourner 429 avec Retry-After
25.3 En-têtes de sécurité
25.3.1 HSTS (Strict-Transport-Security)
25.3.2 CSP (Content-Security-Policy)
25.3.3 X-Frame-Options (anti-clickjacking)
25.3.4 X-Content-Type-Options (nosniff)
25.3.5 Referrer-Policy
25.4 Clés API
25.4.1 En-tête ou chaîne de requête
25.4.2 Gestionnaire d’authentification personnalisé
25.4.3 Stocker les clés de manière sécurisée (Azure Key Vault, Data Protection)
25.5 Signature HMAC
25.5.1 Signature de la requête (le client calcule le hachage)
25.5.2 Le serveur recalcule et compare
25.5.3 Prévention des attaques par rejeu (nonce, horodatage)
25.6 Protection des données (DPAPI)
25.6.1 IDataProtectionProvider
25.6.2 Protect et Unprotect
25.6.3 Anneau de clés (stockage, rotation automatique)
25.6.4 Chaînes d’objectif (clés isolées)
25.7 Validation des entrées
25.7.1 Anti-XSS intégré (insuffisant)
25.7.2 FluentValidation pour les règles complexes
25.7.3 Liste blanche vs liste noire
25.8 OWASP Top 10 pour les API
25.8.1 API1 : Autorisation au niveau objet défaillante
25.8.2 API2 : Authentification défaillante
25.8.3 API3 : Exposition excessive de données
25.8.4 API4 : Manque de limitation de débit
25.8.5 API5 : Autorisation au niveau fonction défaillante
25.8.6 API6 : Assignment massif
25.8.7 API7 : Mauvaise configuration de la sécurité
25.8.8 API8 : Injection
25.8.9 API9 : Mauvaise gestion des actifs
25.8.10 API10 : Journalisation et surveillance insuffisantes
25.9 Projet API météo sécurisée
26 - Authentification dans ASP.NET Core
26.1 Schémas d’authentification
26.1.1 Authentification par cookie (applications web traditionnelles)
26.1.2 JWT Bearer (jetons API)
26.1.3 OAuth 2.0 et OpenID Connect (fournisseurs externes)
26.2 Configuration
26.2.1 AddAuthentication et AddJwtBearer
26.2.2 Attribut Authorize
26.2.3 Logique personnalisée avec AuthenticationHandler
26.3 Détails sur JWT
26.3.1 En-tête, charge utile, signature
26.3.2 ÉMetteur, audience, expiration
26.3.3 Signature symétrique (HMAC) vs asymétrique (RSA)
26.4 Projet Authentification JWT pour l’API Todo
27 - Autorisation basée sur les rôles, les politiques et les ressources
27.1 Basée sur les rôles
27.1.1 Authorize avec Roles
27.1.2 Revendications (claims) avec type de rôle
27.2 Basée sur les politiques
27.2.1 AddAuthorization avec politiques
27.2.2 RequireClaim, RequireRole, RequireAssertion
27.2.3 IAuthorizationRequirement personnalisé et AuthorizationHandler
27.3 Basée sur les ressources
27.3.1 Injecter IAuthorizationService
27.3.2 Appeler AuthorizeAsync avec utilisateur, ressource, exigence
27.3.3 Dans un endpoint, vérifier la propriété
27.4 Projet API Todo avec politiques de rôle et de propriété
28 - Accès aux bases de données avec EF Core et Dapper
28.1 EF Core
28.1.1 DbContext, DbSet
28.1.2 Migrations (Add-Migration, Update-Database)
28.1.3 Requêtes LINQ traduites en SQL
28.1.4 Suivi des modifications et SaveChanges
28.1.5 Jetons de concurrence (Timestamp)
28.2 Dapper
28.2.1 QueryAsync<T> (SQL brut)
28.2.2 ExecuteAsync (non-requête)
28.2.3 Multi-mappage (QueryAsync<T, U, TResult>)
28.2.4 Avantage de performance par rapport à EF Core
28.3 Quand utiliser l’un ou l’autre
28.3.1 EF Core pour les graphes d’objets complexes, migrations
28.3.2 Dapper pour les requêtes en lecture seule haute performance
28.3.3 Utiliser les deux ensemble (CQRS léger)
28.4 Projet API de blog avec EF Core pour les écritures et Dapper pour les lectures
29 - Entrées-sorties fichiers et flux pour les développeurs backend
29.1 Aides du système de fichiers
29.1.1 File, Directory, FileInfo, DirectoryInfo
29.1.2 ReadAllText, WriteAllText (pratique mais charge tout le fichier)
29.2 Flux (Streams)
29.2.1 FileStream (lire/écrire des octets)
29.2.2 StreamReader / StreamWriter (texte)
29.2.3 MemoryStream (tampon en mémoire)
29.2.4 GZipStream (compression)
29.3 Réponses en streaming
29.3.1 Results.Stream dans les API minimales
29.3.2 FileStreamResult dans les contrôleurs
29.3.3 ÉViter de charger de gros fichiers en mémoire
29.4 Projet API d’envoi et téléchargement de fichiers
30 - Files d’attente de messages et architecture événementielle
30.1 Courtiers de messages
30.1.1 RabbitMQ (populaire, AMQP)
30.1.2 Azure Service Bus (cloud)
30.1.3 AWS SQS / SNS
30.1.4 Kafka (débit élevé)
30.2 Abstractions
30.2.1 MassTransit (supporte plusieurs courtiers)
30.2.2 NServiceBus (commercial)
30.2.3 Bibliothèques client brutes
30.3 Idempotence
30.3.1 Clés d’idempotence dans les en-têtes de message
30.3.2 Stocker les ID de messages traités
30.3.3 Livraison exactement une fois (pas vraiment possible, mais consommateurs idempotents)
30.4 Patron Outbox
30.4.1 Stocker les messages dans la base de données dans la transaction
30.4.2 Un processeur d’arrière-plan publie sur le courtier
30.4.3 Empêche la perte de messages en cas de panne du courtier
30.5 Files de lettres mortes (Dead-letter queues)
30.5.1 Gérer les messages empoisonnés
30.5.2 Politiques de réessai et lettre morte après un nombre maximal d’essais
30.6 Projet Traitement de commandes avec RabbitMQ et MassTransit
31 - GRPC pour des API haute performance
31.1 Protocole Buffers (Protobuf)
31.1.1 Syntaxe .proto pour messages et services
31.1.2 Types scalaires (int32, string, bool)
31.1.3 Champs répétés, énumérations, messages imbriqués
31.2 Types de services gRPC
31.2.1 Unaire (requête-réponse)
31.2.2 Streaming serveur (plusieurs réponses)
31.2.3 Streaming client (plusieurs requêtes)
31.2.4 Streaming bidirectionnel
31.3 Implémentation dans .NET
31.3.1 Paquet Grpc.AspNetCore
31.3.2 Génération de code à partir de .proto
31.3.3 Implémentation du service (hérite de la classe générée)
31.4 GRPC vs REST
31.4.1 Performance (binaire, multiplexage HTTP/2)
31.4.2 Contrat d’abord vs code d’abord
31.4.3 GRPC-Web pour les clients navigateur
31.5 Projet Service de streaming de prix d’actions
32 - Communication temps réel avec SignalR
32.1 Hubs
32.1.1 Classe Hub
32.1.2 Méthodes appelables par le client
32.1.3 Appeler des méthodes client
32.2 Gestion des connexions
32.2.1 OnConnectedAsync et OnDisconnectedAsync
32.2.2 Conserver les ID de connexion
32.2.3 Logique de reconnexion
32.3 Montée en charge
32.3.1 Plan de données Redis (Redis backplane)
32.3.2 Service Azure SignalR (entièrement géré)
32.3.3 Sessions persistantes (si pas de plan de données)
32.4 Transports
32.4.1 WebSockets (meilleure performance)
32.4.2 Server-Sent Events (SSE)
32.4.3 Long polling (fallback)
32.5 Projet Application de chat en direct
33 - Docker et conteneurisation pour le backend .NET
33.1 Bases de Docker
33.1.1 Dockerfile : FROM, WORKDIR, COPY, RUN, EXPOSE, ENTRYPOINT
33.1.2 Constructions multi-étapes (images de build vs runtime)
33.1.3 .Dockerignore
33.2 Docker Compose
33.2.1 Docker-compose.yml (services, réseaux, volumes)
33.2.2 Variables d’environnement
33.2.3 Dépendances (depends_on)
33.3 Tests de santé (Health checks)
33.3.1 HEALTHCHECK dans le Dockerfile
33.3.2 Health checks ASP.NET Core (AddHealthChecks)
33.4 Projet Dockeriser l’API Todo avec PostgreSQL
34 - CI/CD pour le backend .NET
34.1 Plateformes CI/CD
34.1.1 GitHub Actions
34.1.2 Azure DevOps Pipelines
34.1.3 GitLab CI
34.1.4 Jenkins (hérité)
34.2 Pipeline typique
34.2.1 Build (dotnet build)
34.2.2 Test (dotnet test)
34.2.3 Publication (dotnet publish)
34.2.4 Construction de l’image Docker (docker build)
34.2.5 Pousser vers un registre (docker push)
34.2.6 Déployer sur Azure Container Instances, Kubernetes, VM
34.3 Infrastructure as Code
34.3.1 Bicep (pour Azure Resource Manager)
34.3.2 Terraform (multi-cloud)
34.4 Projet CI/CD avec GitHub Actions pour l’API Todo
35 - Capstone intermédiaire : API REST sécurisée avec contrôle d’accès basé sur les rôles et OTP
35.1 Aperçu du projet
35.2 Fonctionnalités : JWT, rôles, OTP, limitation de débit, idempotence
35.3 ÉTapes d’implémentation
35.3.1 Créer un projet ASP.NET Core avec JWT
35.3.2 Implémenter l’enregistrement et la connexion des utilisateurs
35.3.3 Ajouter des revendications de rôles et des endpoints administrateur
35.3.4 Service de génération OTP (6 chiffres avec expiration)
35.3.5 Service d’arrière-plan + canal pour l’envoi d’emails
35.3.6 Middleware d’idempotence avec Redis
35.3.7 Tests d’intégration
35.3.8 Docker et CI/CD
35.4 Livrables
36 - Au-delà de senior : systèmes distribués, cloud natif et leadership
36.1 Microservices vs monolithe modulaire
36.1.1 Avantages et compromis
36.1.2 Découverte de services (Consul, Eureka)
36.1.3 Passerelles API (Ocelot, YARP, Kong)
36.2 Transactions distribuées
36.2.1 Commit en deux phases (peu courant dans les microservices)
36.2.2 Patron Saga (chorégraphie vs orchestration)
36.2.3 Idempotence et transactions compensatoires
36.3 Patrons cloud natifs
36.3.1 Réessai et disjoncteur (circuit breaker) avec Polly
36.3.2 Patron Sidecar (par exemple Dapr)
36.3.3 Tests de santé (health checks) et sondes de vivacité (liveness)
36.4 Leadership
36.4.1 Enregistrements de décision d’architecture (ADR)
36.4.2 Mener des revues de conception technique
36.4.3 Mentorat des ingénieurs seniors
36.5 Projet ADR et preuve de concept pour le patron Saga
37 - Projet final de maîtrise : Système bancaire central (Finance)
37.1 Contexte métier
37.2 Fonctionnalités principales : comptes, virements, intérêts, flux temps réel
37.3 Défis techniques : idempotence, concurrence, outbox, traçage
37.4 Structure de solution : monolithe modulaire
37.5 Modèles de données
37.6 ÉTapes d’implémentation
37.6.1 Créer une solution avec quatre projets
37.6.2 Définir les modèles de domaine et DbContext
37.6.3 Implémenter un endpoint de virement idempotent
37.6.4 Ajouter la concurrence optimiste (version de ligne)
37.6.5 Configurer RabbitMQ et MassTransit
37.6.6 Implémenter un hub SignalR pour les mises à jour de solde
37.6.7 Workers d’arrière-plan (paiements programmés, intérêts, outbox)
37.6.8 Ajouter des réessais Polly pour les notifications
37.6.9 Configurer OpenTelemetry et Jaeger
37.6.10 ÉCrire Docker Compose
37.6.11 ÉCrire un test de charge k6
37.6.12 Mettre en place CI/CD
37.7 Livrables
37.8 Extensions optionnelles
GitHub
Selectionner la langue
English
Français
Retry and circuit breaker with Polly