Personalizzare l'errore del rate limiting middleware in ASP.NET Core

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi