🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / .Net Core Web Api / ASP.NET Core Rate Limit Kullanımı IpRateLimiting RateLimit Configuration

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)

 

 2024 Haziran 10 Pazartesi
 443