C#如何实现Rate Limiting ASP.NET Core速率限制中间件用法
发布时间 - 2026-01-29 00:00:00 点击率:次推荐使用.NET 7+内置Microsoft.AspNetCore.RateLimiting包,通过AddRateLimiter注册策略、UseRateLimiter启用中间件,并用[EnableRateLimiting]特性应用到控制器或方法,支持Fixed Window、Sliding Window等算法及自定义限流键。
ASP.NET Core 中实现速率限制(Rate Limiting)推荐使用官方内置的 Microsoft.AspNetCore.RateLimiting 包(.NET 7+ 原生支持),它比第三方库更轻量、更集成、更易配置。
启用 Rate Limiting 中间件
在 Program.cs 中注册并启用中间件:
- 调用
AddRateLimiter()添加服务,可配置多种策略 - 调用
UseRateLimiter()启用中间件(必须放在UseAuthorization()之后、UseEndpoints()之前)
示例:
// Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRateLimiter(options =>
{
options.AddFixedWindowLimiter("fixed", opt =>
{
opt.Window = TimeSpan.FromSeconds(60);
opt.PermitLimit = 10;
opt.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
opt.QueueLimit = 5;
});
});
// ... 其他服务注册
var app = builder.Build();
app.UseRateLimiter(); // ⚠️ 位置很重要
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
为控制器或方法应用限流策略
使用 [EnableRateLimiting("policy-name")] 特性标记端点:
- 可加在 Controller 类上(全局生效),也可加在单个 Action 方法上(更精细)
- 策略名必须与
AddRateLimiter中注册的名称一致 - 未标记的端点默认不受限
示例:
[ApiController]
[Route("api/[controller]")]
[EnableRateLimiting("fixed")] // 整个控制器启用
public class ValuesController : ControllerBase
{
[HttpGet]
public IActionResult Get() => Ok(new[] { "a", "b" });
[HttpPost]
[DisableRateLimiting] // 可对个别方法禁用
public IActionResult Post() => Ok();
}
支持的限流算法及配置要点
内置策略包括 Fixed Window、Sliding Window、Token Bucket,常用的是前两种:
- Fixed Window:简单高效,但存在窗口边界突增问题(如每分钟10次,0:59和1:00各来10次 → 实际20次)
- Sliding Window:更精准(如每60秒最多10次),适合高一致性要求场景,但需存储支持(如 Redis)
- 策略可指定
KeyGenerator自定义限流键,例如按 IP、用户 ID 或请求头区分
Sliding Window 示例:
options.AddSlidingWindowLimiter("sliding", opt =>
{
opt.Window = TimeSpan.FromMinutes(1);
opt.SegmentsPerWindow = 12; // 拆成12段(每5秒一段)
opt.PermitLimit = 10;
opt.QueueLimit = 3;
});
自定义限流键(按用户/IP/租户区分)
默认按客户端 IP 限流,可通过 KeyGenerator 改为按用户身份、请求头等维度:
- 返回字符串作为唯一键,相同键共享配额
- 例如:登录用户用
HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value - 注意空值处理,避免 null 引发异常
示例(按用户 ID):
options.AddFixedWindowLimiter("per-user", opt =>
{
opt.Window = TimeSpan.FromMinutes(1);
opt.PermitLimit = 5;
opt.KeyGenerator = async context =>
{
var userId = context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? "anonymous";
return userId;
};
});
基本上就这些。官方 Rate Limiting 中间件开箱即用,无需额外存储(Fixed Window 内存即可),配合策略配置和特性标注,就能快速落地生产级限流能力。
# redis
# go
# app
# ai
# win
# microsoft
# c#
# .net
# red
# 中间件
# NULL
# Token
# 字符串
# 算法
# 自定义
# 推荐使用
# 加在
# 的是
# 放在
# 就能
# 最多
# 两种
# 也可
# 很重要
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
教学论文网站制作软件有哪些,写论文用什么软件
?
Android滚轮选择时间控件使用详解
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何用腾讯建站主机快速创建免费网站?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
高端智能建站公司优选:品牌定制与SEO优化一站式服务
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
如何快速辨别茅台真假?关键步骤解析
如何在Windows环境下新建FTP站点并设置权限?
Laravel如何配置Horizon来管理队列?(安装和使用)
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel如何配置和使用缓存?(Redis代码示例)
javascript中对象的定义、使用以及对象和原型链操作小结
简历没回改:利用AI润色让你的文字更专业
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
如何解决hover在ie6中的兼容性问题
微信小程序 五星评分(包括半颗星评分)实例代码
Laravel如何为API编写文档_Laravel API文档生成与维护方法
IOS倒计时设置UIButton标题title的抖动问题
再谈Python中的字符串与字符编码(推荐)
如何在IIS中新建站点并配置端口与物理路径?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
动图在线制作网站有哪些,滑动动图图集怎么做?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何在宝塔面板中修改默认建站目录?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何自定义建站之星网站的导航菜单样式?
EditPlus中的正则表达式实战(6)
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
java ZXing生成二维码及条码实例分享
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
用v-html解决Vue.js渲染中html标签不被解析的问题
南京网站制作费用,南京远驱官方网站?
如何快速启动建站代理加盟业务?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何快速搭建二级域名独立网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?


