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
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Il nuovo controllo Range di Blazor 9
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Gestione degli stili CSS con le regole @layer
Escludere alcuni file da GitHub Secret Scanning
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Fornire parametri ad un Web component HTML
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Usare il colore CSS per migliorare lo stile della pagina
I più letti di oggi
- Minimal API in ASP.NET Core 8
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!