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
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Utilizzare una qualunque lista per i parametri di tipo params in C#
Ottimizzazione dei block template in Angular 17
Eseguire i worklow di GitHub su runner potenziati
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Ricevere notifiche sui test con Azure Load Testing
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare gRPC su App Service di Azure
Selettore CSS :has() e i suoi casi d'uso avanzati
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API