Mål: At kunne implementerer simpel Rate Limiting Middleware I et .Net API projekt.
Jeg har i dag implementeret noget Rate Limiting i et projekt, og har derfor lavet en lille .Net API, som skal indeholde noget Rate Limiting beskyttelse, som var overraskende nemt at implementere. Da .NET allerede har et library Microsoft.AspNetCore.RateLimiting, kunne man rimelig nemt lave en policy som bestemmer hvornår man skal vente med at lave requests.

Dette er koden som laver min RateLimiting policy kaldet fixed, og den går egentlig ind og siger at man kan som client lave 4 requests hvert 12 sekund. Hvis man laver mere end dette antal af requests i denne tidsbegrænsning, får man en kode 503, som er at serveren ikke kan håndtere den indkommende request. Dog så er denne tilgang ikke så brugervenlig, da man bare får smidt en fejl i hovedet, derfor kan man anvende Queues.

Så tilføjer man bare disse 2 ekstra linjer, som siger at man kan lave en queue af requests på 2, og den tager den ældste i køen og eksekvere først. Det vil sige når vi laver flere requests end det tilladte får vi ikke en fejlkode, men serveren vil vente og udfører den først kaldte request efter overtrædelsen af den policy.
Måden man så fortæller ens API hvilke endpoints som skal benytte Rate Limiting, kan man bruge [EnableRateLimiting("{policy name}")] stående op over det endpoint man vil have der har Rate Limiting.

Kilder:
