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
Migliora la resilienza delle applicazioni con .NET e Azure Container Apps
Aggiungere interattività lato server in Blazor 8
Paginare i risultati con QuickGrid in Blazor
Gestione dei nomi con le regole @layer in CSS
Estrarre dati randomici da una lista di oggetti in C#
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Estendere Microsoft 365 Copilot con .NET
Creare una custom property in GitHub
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Creare una libreria CSS universale - Rotazione degli elementi