Nello scorso script (https://www.aspitalia.com/script/1463/Implementare-Throttling-ASP.NET-Core.aspx) abbiamo introdotto il rate limiting middleware di ASP.NET Core 7.0, tramite cui possiamo controllare il flusso di richieste pervenute al nostro web server.
Il comportamento di default, nel caso in cui una richiesta venga rigettata, è quello di restituire uno status code 503 - Service Unavailable.
Dal punto di vista semantico, probabilmente non è una risposta corretta, dato che le specifiche HTTP prevedono un codice ad-hoc per questo use case, ossia 429 - Too many requests.
La buona notizia è che possiamo facilmente modificare questo comportamento in fase di registrazione del servizio:
builder.Services.AddRateLimiter(_ => { _.OnRejected = async (context, cancellationToken) => { context.HttpContext.Response.StatusCode = (int)HttpStatusCode.TooManyRequests; context.HttpContext.Response.ContentType = "application/json"; await context.HttpContext.Response.WriteAsync(JsonSerializer.Serialize(new { message = "Too many requests" })); }; _.AddFixedWindowLimiter("default", options => { ... }); });
Come possiamo vedere, abbiamo intercettato l'evento OnRejected, all'interno del quale abbiamo accesso all'HttpContext della richiesta corrente. A questo punto, non dobbiamo far altro che impostare lo status code desiderato, unitamente - se vogliamo - a un messaggio di errore.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Eseguire una GroupBy per entity in Entity Framework
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Migrare una service connection a workload identity federation in Azure DevOps
Load test di ASP.NET Core con k6
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Usare il versioning con i controller di ASP.NET Core Web API
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Implementare l'infinite scroll con QuickGrid in Blazor Server
Usare le collection expression per inizializzare una lista di oggetti in C#
Implementare il throttling in ASP.NET Core