using System.Threading.RateLimiting; using Jtr.Tools.API; using Microsoft.AspNetCore.RateLimiting; var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddRateLimiter(o => o .AddSlidingWindowLimiter(policyName: "sliding", options => { options.PermitLimit = 10; // Maximum 10 requests per 1-second window options.Window = TimeSpan.FromSeconds(1); options.SegmentsPerWindow = 10; options.QueueLimit = 2; options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; })); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddControllers(); builder.Services.AddExceptionHandler(); builder.Services.AddProblemDetails(); builder.Services.AddCors(opts => { opts.AddPolicy("default", opts => { opts .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); }); }); builder.Services.AddSwaggerGen(); var app = builder.Build(); app.UseRateLimiter(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseExceptionHandler(); app.UseHttpsRedirection(); app.UseCors("default"); app.MapControllers().RequireRateLimiting("sliding"); app.Run();