介绍

AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用程序发出请求的速率。AspNetCoreRateLimit 包包含一个 IpRateLimitMiddleware 和一个 ClientRateLimitMiddleware,对于每个中间件,您可以为不同的场景设置多个限制,例如允许 IP 或客户端在每秒、15 分钟等时间间隔内进行最大调用次数。您可以定义这些限制来解决对 API 发出的所有请求,或者您可以将限制范围限定为每个 API URL 或 HTTP 动词和路径。

地址

https://github.com/stefanprodan/AspNetCoreRateLimit

功能

基于客户端 IP 的速率限制

  • 设置和配置

  • 定义速率限制规则

  • 行为

  • 运行时更新速率限制

基于客户端 ID 的速率限制

  • 设置和配置

  • 定义速率限制规则

  • 行为

  • 运行时更新速率限制

高级配置

  • 自定义配额超出响应

  • IP / ClientId 解析贡献者

  • 使用 Redis 作为分布式计数器存储

使用(基于客户端 IP 的速率限制)

NuGet 安装:

Install-Package AspNetCoreRateLimit

Install-Package AspNetCoreRateLimit.Redis

Startup.cs代码:

public void ConfigureServices(IServiceCollection services)
{services.AddOptions();services.AddMemoryCache();services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));services.AddInMemoryRateLimiting();services.AddMvc();services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
}public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{app.UseIpRateLimiting();app.UseMvc();
}

appsettings.json:

"IpRateLimiting": {"EnableEndpointRateLimiting": false,"StackBlockedRequests": false,"RealIpHeader": "X-Real-IP","ClientIdHeader": "X-ClientId","HttpStatusCode": 429,"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],"EndpointWhitelist": [ "get:/api/license", "*:/api/status" ],"ClientWhitelist": [ "dev-id-1", "dev-id-2" ],"GeneralRules": [{"Endpoint": "*","Period": "1s","Limit": 2},{"Endpoint": "*","Period": "15m","Limit": 100},{"Endpoint": "*","Period": "12h","Limit": 1000},{"Endpoint": "*","Period": "7d","Limit": 10000}]}

如果EnableEndpointRateLimiting设置为false,则限制将在全局范围内应用,并且仅适用于端点的规则*。例如,如果您设置每秒 5 次调用的限制,则对任何端点的任何 HTTP 调用都将计入该限制。

如果EnableEndpointRateLimiting设置为true,则限制将适用于每个端点,如{HTTP_Verb}{PATH}。例如,如果您为*:/api/values客户端设置每秒调用 5 次的限制,则每秒可以调用GET /api/values5 次,但也可以调用 5 次PUT /api/values

如果StackBlockedRequests设置为false,则拒绝的呼叫不会添加到节流计数器。如果客户端每秒发出 3 个请求,并且您设置了每秒一个呼叫的限制,则其他限制(例如每分钟或每天计数器)将仅记录第一个呼叫,即未被阻止的呼叫。如果您希望被拒绝的请求计入其他限制,您必须设置StackBlockedRequeststrue.

用于在您的RealIpHeaderKestrel 服务器位于反向代理之后时提取客户端 IP,如果您的代理使用不同的标头,则X-Real-IP使用此选项进行设置。

ClientIdHeader用于提取白名单的客户端 ID 。如果此标头中存在客户端 ID 并且与 ClientWhitelist 中指定的值匹配,则不应用速率限制。

这里只写了基于客户端 IP 的速率限制,如果对此项目感兴趣,更多文档请前往AspNetCoreRateLimit官网。

最后大家如果喜欢我的文章,还麻烦给个关注, 希望net生态圈越来越好!

AspNetCoreRateLimit - ASP.NET Core 速率限制中间件。相关推荐

  1. 给 asp.net core 写个中间件来记录接口耗时

    给 asp.net core 写个中间件来记录接口耗时 Intro 写接口的难免会遇到别人说接口比较慢,到底慢多少,一个接口服务器处理究竟花了多长时间,如果能有具体的数字来记录每个接口耗时多少,别人再 ...

  2. ASP.NET Core 中的中间件

    前言   由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...

  3. 如何在 ASP.NET Core 中 自定义中间件

    ASP.NET Core 是一个跨平台,开源的,轻量级,高性能 并且高度模块化的web框架,同时扩展性也是非常强,你可以在 request -> response 请求管道中安插各种中间件来根据 ...

  4. 理解ASP.NET Core中的中间件

    中间件是ASP.NET Core的一个重要特点,ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求,完成都是由于中间件,那么它究竟是怎么一回事呢? 一.理解中间件 ASP.NET Co ...

  5. asp.net core 自定义异常处理中间件

    Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异常,不希望记录错误日志,目前主要是用户请求取消导 ...

  6. ASP.NET Core URL Rewrite中间件

    URL重写是基于一个或多个预置规则修改请求URL的行为.URL重写在资源位置和访问地址之间创建了一种抽象,这样二者之间就减少了紧密的联系.URL重写有多种适用的场景: 临时或永久移动或替换服务器资源, ...

  7. ASP.NET Core -中间件(Middleware)使用

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  8. ASP.NET Core 中间件(Middleware)详解

    ASP.NET Core 中间件(Middleware)详解 原文:ASP.NET Core 中间件(Middleware)详解 本文为官方文档译文,官方文档现已非机器翻译 https://docs. ...

  9. ASP.NET Core中HTTP管道和中间件的二三事

    本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:中间件是什么?在.NET Core中的工作原理又是怎样的呢? 配置ASP.NET Core请求(Request)处理管道 ...

最新文章

  1. 充电电池和充电时间说明
  2. 机器学习(一)——线性回归、分类与逻辑回归
  3. 网络资源(1) - Hadoop视频
  4. 中国联通4G携号转网业务支撑的架构实践
  5. JAVA接口继承、抽象类等
  6. GMM-HMM语音识别原理详解 - 全文
  7. 管理感情:精力有限,要么干活,要么内斗
  8. linux 环境变量_linux的环境变量
  9. Spring Boot 静态资源处理
  10. myeclipse10破解找不到common文件夹的问题
  11. linux asm 裸设备,为ASM生成裸设备
  12. 用matlab判断两个球是否相交,判断两个矩阵相交
  13. 2016天津成考计算机试题,2016年天津事业单位考试《职业能力测验》(部分)试题及答案解析...
  14. js控制浏览器窗口弹出、警告框、确认框
  15. 机房服务器安装操作系统
  16. WPS/WORD设置每一页显示50行代码或者是固定数量的行数
  17. 集群环境下,谁偷走quartz配置的定时任务
  18. linux 网口对应网卡_Intel 700系列 电口万兆网卡 X710T2L评测
  19. 怎么用键盘快捷键将光标定位到浏览器地址栏
  20. 火神山秒建5G基站,“云监工”背后的是通信技术的极限挑战

热门文章

  1. Jfinal 显示欢迎页 index.jsp
  2. ubuntu 开启 apache mod_rewrite
  3. 解决php连接mysql数据库中文乱码问题
  4. SAP BW系统日常维护日常工作及常见的Infopackage错误
  5. linux多线程求和_linux 多线程信号处理总结
  6. jquery网页刷新后控件失效_jquery动态增减控件如何才能不刷新页面
  7. jQuery系列(十四):jQuery中的ajax
  8. java虚拟机读写其他进程的数据
  9. 构造不可变类及其优点
  10. HDU 3487 Play with Chain | Splay