在构建现代Web应用时,尤其是面向公众的API服务,防止恶意请求或突发流量导致系统崩溃是至关重要的。ASP.NET Core 提供了强大的 Rate Limiting(限流) 功能,帮助开发者轻松实现请求频率控制。本文将手把手教你如何在 ASP.NET Core 项目中启用并配置限流策略,即使你是编程新手也能轻松掌握!
Rate Limiting 是一种限制客户端在特定时间窗口内发送请求数量的技术。例如:每分钟最多允许100次请求。这能有效防止DDoS攻击、爬虫滥用或用户误操作造成的服务器过载。
确保你已安装:
打开终端,执行以下命令创建新项目:
dotnet new webapi -n MyRateLimitApicd MyRateLimitApi 从 .NET 7 开始,ASP.NET Core 内置了 Microsoft.AspNetCore.RateLimiting 中间件,无需额外安装 NuGet 包。
打开 Program.cs 文件,添加限流服务和中间件:
using Microsoft.AspNetCore.RateLimiting;var builder = WebApplication.CreateBuilder(args);// 添加限流服务builder.Services.AddRateLimiter(options =>{ options.AddFixedWindowLimiter(policyName: "fixed", limiterOptions => { limiterOptions.PermitLimit = 5; // 允许5次请求 limiterOptions.Window = TimeSpan.FromMinutes(1); // 时间窗口为1分钟 limiterOptions.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; limiterOptions.QueueLimit = 2; // 排队等待的请求数上限 });});builder.Services.AddControllers();var app = builder.Build();// 启用限流中间件app.UseRateLimiter();app.MapControllers();app.Run(); 修改 Controllers/WeatherForecastController.cs,添加 [EnableRateLimiting] 特性:
using Microsoft.AspNetCore.Mvc;using Microsoft.AspNetCore.RateLimiting;[ApiController][Route("[controller]")][EnableRateLimiting("fixed")] // 应用名为 "fixed" 的限流策略public class WeatherForecastController : ControllerBase{ private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; [HttpGet] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }) .ToArray(); }} 启动项目:
dotnet run 使用浏览器或 Postman 连续访问 https://localhost:5001/weatherforecast 超过5次(在1分钟内),第6次请求将收到 429 Too Many Requests 响应。
你还可以根据客户端IP、用户ID等动态设置限流策略。例如,按IP限流:
options.AddFixedWindowLimiter("ip-policy", context =>{ var httpContext = context as HttpContext; var ip = httpContext?.Connection.RemoteIpAddress?.ToString() ?? "unknown"; return new RateLimitPartition<int>(ip, 10, TimeSpan.FromMinutes(1));}); 通过 ASP.NET Core 内置的 Rate Limiting 功能,你可以轻松实现 Web API限流,提升系统在 高并发 场景下的稳定性。无论是简单的固定窗口限流,还是复杂的动态策略,都能满足你的需求。
记住,合理使用 Rate Limiting中间件 不仅能保护你的服务器,还能提升用户体验。希望这篇教程能帮助你掌握 ASP.NET Core限流 的核心技巧!
提示:生产环境中建议结合日志记录和监控系统,实时观察限流效果。
本文由主机测评网于2025-12-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025127269.html