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
Effettuare il refresh dei dati di una QuickGrid di Blazor
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare Container Queries nominali
Referenziare un @layer più alto in CSS
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Migliorare l'organizzazione delle risorse con Azure Policy
Miglioramenti nelle performance di Angular 16
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Usare le navigation property in QuickGrid di Blazor
Gestione degli stili CSS con le regole @layer
Gestire il colore CSS con HWB
Aggiornare a .NET 9 su Azure App Service