FireflySoft.MultiRateLimit.AspNetCore
3.1.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet tool install --global FireflySoft.MultiRateLimit.AspNetCore --version 3.1.0
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest # if you are setting up this repo dotnet tool install --local FireflySoft.MultiRateLimit.AspNetCore --version 3.1.0
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=FireflySoft.MultiRateLimit.AspNetCore&version=3.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
nuke :add-package FireflySoft.MultiRateLimit.AspNetCore --version 3.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Introduction
Fireflysoft.RateLimit is a rate limiting library based on .Net standard. Its core is simple and lightweight, and can flexibly meet the rate limiting needs of many scenarios.
Features
- Multiple rate limiting algorithms: built-in fixed window, sliding window, leaky bucket, token bucket, and can be extended.
- Multiple counting storage: memory and Redis (including cluster).
- Distributed friendly: supports unified counting of distributed programs with Redis storage.
- Flexible rate limiting targets: each data can be extracted from the request to set rate limiting targets.
- Support rate limit penalty: the client can be locked for a period of time after the rate limit is triggered.
- Time window enhancement: support to the millisecond level; support starting from the starting point of time periods such as seconds, minutes, hours, dates, etc.
- Real-time tracking: the number of requests processed and the remaining allowed requests in the current counting cycle, as well as the reset time of the counting cycle.
- Dynamically change the rules: support the dynamic change of the rate limiting rules when the program is running.
- Custom error: you can customize the error code and error message after the current limit is triggered.
- Universality: in principle, it can meet any scenario that requires rate limiting.
Usage
The following code calls the rate-limit middleware from Startup.Configure:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddRateLimit(new IAlgorithm[2] {
new InProcessFixedWindowAlgorithm(
new[] {
new FixedWindowRule()
{
ExtractTarget = context =>
{
var httpContext= context as HttpContext;
// Through CDN
var ip = httpContext!.Request.Headers["Cdn-Src-Ip"].FirstOrDefault();
if (!string.IsNullOrEmpty(ip))
return ip;
// Through SLB
ip = httpContext!.Request.Headers["X-Forwarded-For"].FirstOrDefault();
if (!string.IsNullOrEmpty(ip))
return ip;
ip = httpContext!.Connection.RemoteIpAddress?.ToString();
return ip??"Anonymous-IP";
},
CheckRuleMatching = context =>
{
return true;
},
Name = "ClientIPRule",
LimitNumber = 30,
StatWindow = TimeSpan.FromSeconds(5)
}
}),
new InProcessTokenBucketAlgorithm(
new[] {
new TokenBucketRule(4,4,TimeSpan.FromSeconds(5))
{
ExtractTarget = context =>
{
var httpContext= context as HttpContext;
return httpContext!.Request.Path.Value;
},
CheckRuleMatching = context =>
{
return true;
},
Name="default limit rule",
}
})
});
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseMultiRateLimit();
...
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
Return X-RateLimit-XXX in HTTP response.