.NET library for API Rate Limiting with Redis support for distributed systems, configurable limits and policies, and extensible architecture for custom implementations.
- Redis Support - Distributed rate limiting for multi-instance deployments
- Configurable Limits & Policies - Flexible configuration for different rate limiting scenarios
- Multiple Strategies - Token Bucket, Sliding Window, and custom implementations
- ASP.NET Core Middleware - Seamless integration with web applications
- Extensible Architecture - Easy to add custom rate limiting strategies
- Production-Ready - Built for enterprise applications
dotnet add package RateLimiterLibAdd to your ASP.NET Core application:
// Program.cs or Startup.csservices.AddRateLimiter(options =>{options.RateLimit=100;// requestsoptions.WindowSizeSeconds=60;// per minuteoptions.UseRedis=true;// for distributed systems});app.UseRateLimitMiddleware();src/RateLimiter/
├── RateLimitStrategies/ # Token Bucket, Sliding Window implementations
├── Middleware/ # ASP.NET Core middleware integration
├── Factories/ # Strategy factory patterns
├── Interfaces/ # Core abstractions
├── Models/ # Data structures
├── Redis/ # Distributed caching support
├── Extensions/ # Helper methods
└── Utils/ # Utility functions
varlimiter=newRateLimiter(newTokenBucketStrategy(100,TimeSpan.FromMinutes(1)));if(!limiter.IsRequestAllowed(userId)){returnStatusCode(429,"Too many requests");}varredisLimiter=newRedisRateLimiter(redisConnection,newTokenBucketStrategy(1000,TimeSpan.FromMinutes(1)));varpolicies=newRateLimitPolicies{{"PublicAPI",newRateLimitPolicy{Requests=100,WindowSeconds=60}},{"AuthenticatedAPI",newRateLimitPolicy{Requests=1000,WindowSeconds=60}},{"AdminAPI",newRateLimitPolicy{Requests=10000,WindowSeconds=60}}};- .NET Core - Cross-platform framework
- C# - Modern programming language
- Redis - Distributed caching
- ASP.NET Core - Web framework integration
- .NET Core 3.1 or higher
- Redis (for distributed rate limiting)
- ASP.NET Core 3.1 or higher
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
Created by: @asperger99