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
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Usare le navigation property in QuickGrid di Blazor
Utilizzare i variable font nel CSS
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Introduzione alle Container Queries
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Ordine e importanza per @layer in CSS
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Change tracking e composition in Entity Framework
La gestione della riconnessione al server di Blazor in .NET 9