当前位置:首页 > C# > 正文

ASP.NET Core Rate Limiting限流实战指南(小白也能轻松上手的Web API限流配置教程)

在构建现代Web应用时,尤其是面向公众的API服务,防止恶意请求或突发流量导致系统崩溃是至关重要的。ASP.NET Core 提供了强大的 Rate Limiting(限流) 功能,帮助开发者轻松实现请求频率控制。本文将手把手教你如何在 ASP.NET Core 项目中启用并配置限流策略,即使你是编程新手也能轻松掌握!

ASP.NET Core Rate Limiting限流实战指南(小白也能轻松上手的Web API限流配置教程) Core限流 Limiting中间件 Web API限流 高并发防护 第1张

什么是 Rate Limiting?

Rate Limiting 是一种限制客户端在特定时间窗口内发送请求数量的技术。例如:每分钟最多允许100次请求。这能有效防止DDoS攻击、爬虫滥用或用户误操作造成的服务器过载。

准备工作

确保你已安装:

  • .NET 7 或 .NET 8 SDK
  • 任意代码编辑器(如 Visual Studio 或 VS Code)

步骤一:创建 ASP.NET Core Web API 项目

打开终端,执行以下命令创建新项目:

dotnet new webapi -n MyRateLimitApicd MyRateLimitApi

步骤二:启用内置 Rate Limiting 中间件

从 .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 或用户身份限流

你还可以根据客户端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限流 的核心技巧!

提示:生产环境中建议结合日志记录和监控系统,实时观察限流效果。