1-) .Net Core Web Api - ASP.NET Core Rate Limit Kullanımı IpRateLimiting RateLimit Configuration
Install-Package AspNetCoreRateLimit
appsettings a aşağıdakini ekle
"IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
"RealIpHeader": "X-Real-IP",
"ClientIdHeader": "X-ClientId",
"HttpStatusCode": 429,
"GeneralRules": [
{
"Endpoint": "*:/api/Values", // yılız * hepsi demek
"Period": "100s",
"Limit": 5
}
]
},
program.cs e aşağıdakini ekle
builder.Services.AddMemoryCache();
builder.Services.AddInMemoryRateLimiting();
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
builder.Services.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting"));
var app = builder.Build();
app.UseIpRateLimiting();
ve
if (app.Environment.IsDevelopment() || app.Environment.IsProduction())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapi v1");
});
}
KODLARIN HEPSİ AŞAĞIDADIR
1. appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "IpRateLimiting": { "EnableEndpointRateLimiting": true, "StackBlockedRequests": false, "RealIpHeader": "X-Real-IP", "ClientIdHeader": "X-ClientId", "HttpStatusCode": 429, "GeneralRules": [ { "Endpoint": "*:/api/Values", // yılız * hepsi demek "Period": "100s", "Limit": 5 } ] }, "AllowedHosts": "*" } |
2. program.cs
using AspNetCoreRateLimit; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddMemoryCache(); builder.Services.AddInMemoryRateLimiting(); builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>(); builder.Services.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting")); var app = builder.Build(); if (app.Environment.IsDevelopment() || app.Environment.IsProduction()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "myapi v1"); }); } app.UseIpRateLimiting(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run(); |
• Seconds (s): "Period": "10s" (10 seconds)
• Minutes (m): "Period": "1m" (1 minute)
• Hours (h): "Period": "1h" (1 hour)
• Days (d): "Period": "1d" (1 day)
• Weeks (w): "Period": "1w" (1 week)
• Months (M): "Period": "1M" (1 month)