La cle API publique d'une instance est embarquee dans les apps visiteur et lisible en clair dans le navigateur sur visitapp-web : elle est publique par construction. Les endpoints IA sont les seuls qui coutent de l'argent reel (jetons Gemini), et rien n'empechait d'y boucler jusqu'a vider le quota mensuel d'un client qui n'a rien fait. AddRateLimiter natif .NET 8, fenetre fixe 120 req/min, 429 avec Retry-After. Applique a chat ET translate : les deux consomment des jetons, et translate est atteignable avec la meme cle. Partition par instance parce que c'est l'instance qui porte le quota protege : l'abus chez un client ne doit pas ralentir les autres. Deux choix de placement qui ne sont pas cosmetiques. UseRateLimiter est apres UseCors — un 429 pose avant les en-tetes CORS s'affiche comme une erreur CORS et le client ne voit jamais le vrai code — et apres UseAuthentication, sinon la partition n'a pas le claim d'instance et tout le monde tombe dans le meme seau, ce qui transformerait la protection en panne globale. Jamais exerce a l'execution : le projet n'a aucune infrastructure de test HTTP et en monter une pour ce seul controle serait disproportionne. A verifier une fois par une boucle de 130 appels, qui doit basculer en 429 au 121e. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Migrations
Invite de commande
Ouvrir un invite de commande dans le répertoire de la solution
Supprimer la dernière migration
A faire uniquement si elle n'a pas encore été appliquée à la base de données
dotnet ef migrations remove
Ajouter une migration
dotnet ef migrations add
Mise à jour de la base de données
dotnet ef database update