.NET 7.0在.NET Core Web API中实现限流就这么简单

    限流可以保障web API站点的安全性,它有助于保护服务器的资源,防止无效的访问,从而达到站点访问平衡性。本文将探讨如何在.NET Core Web API实现限流。并用案例介绍如何限流。

1、什么是限流

限流是一种用于限制客户端在特定时间段内可以请求API次数。它为客户端访问某些接口或资源的访问频率设置了限流。通过实施限流,开发人员可以防止滥用访问、服务器负载均衡并保持高质量的用户体验。

2、限流的策略

1)基于令牌桶:令牌桶算法使用虚拟令牌桶来跟踪每个客户端的请求。客户端每次发出请求时,它都会消耗一个令牌。如果令牌桶为空,则客户端将被阻止发出更多请求,直到令牌桶重新填充。

2)基于漏桶:漏桶算法使用虚拟漏桶来跟踪每个客户端的请求。客户端每次发出请求时,它都会将请求添加到漏桶中。漏桶以恒定的速率漏出请求。如果漏桶已满,则客户端将被阻止发出更多请求,直到漏桶中的请求被处理完。

3)基于滑动窗口:滑动窗口算法跟踪每个客户端在特定时间段(例如,一分钟)内发出的请求数。如果客户端在时间段内发出的请求数超过限制,则它将被阻止请求,直到当前时间段结束。

本文将介绍如何在.NET Core Web API实现基于滑动窗口的限流。

3、.NET Core Web API实现限流

.NET Core Web API有许多实现限流的方法,可以自定义中间件,也可以使用第三方的中间件等。本文将介绍使用“AspNetCoreRateLimit”中间件实现API的限流。“AspNetCoreRateLimit”中间件是nuget开源项目,目前有2.9kstars,还算不错。它是“基于滑动窗口”实现限流,它的主要规则是可以根据客户端的ip来限制指定时间段的访问次数。

使用步骤:

1)安装nuget包

用vs新建一个Web API项目,使用nuget程序包管理控制台命令或者NuGet 包管理器安装AspNetCoreRateLimit中间件。命令安装如下。

Install-package AspNetCoreRateLimit

2)在 Program.cs开始文件中注册AspNetCoreRateLimit组件,代码如下:

builder.Services.AddMemoryCache();
//下面的IpRateLimiting为限流策略的配置文件结点名称,可以配置多个策略
builder.Services.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting"));
//添加对内存中的 IP 策略存储的支持
builder.Services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
builder.Services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
builder.Services.AddInMemoryRateLimiting();

3) 在 appsettings.json文件中添加规则,规则如下:

"IpRateLimiting": {
    "EnableEndpointRateLimiting": true,
    "StackBlockedRequests": false,
    "RealIpHeader": "X-Real-IP",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    "IpWhitelist": [],
    "EndpointWhitelist": [],
    "GeneralRules": [
      {
        "Endpoint": "GET:/WeatherForecast",
        "Period": "1m",
        "Limit": 10
      }
    ]
  }
  //欢迎关注公众号DOTNET开发跳槽,领取面试题
  //加微信号xbhpnet入群交流技术和跳槽经验.

上面的节点名称是配置中间件时节点名称,规则GeneralRules的节点下,意思是限制/WeatherForecast的链接,每分钟最大请求次数为10次。如果达到限制次数,将对客户端返回429。具体规则可以看官网。

4)添加中间件

为了达到效果,最好添加到第一个,代码如下:

var app = builder.Build();
app.UseIpRateLimiting();

5)效果如下

最后我们来看看效果,是否能真限流。

视频中展示了限流的效果,1分钟内限流10次,超过次数后会拦截访问并给出提示。

上面展示了.NET Core Web API限流的步骤和效果,还可以设置多种限流的方式,比如全局限流等,大家可以查阅这个中间件的文档,文档如下:github.com/stefanprodan/AspNetCoreRateLimit/wiki/IpRateLimitMiddleware#defining-rate-limit-rules

结语

本文讲述了在.NET Core Web API中实现限流,以及限流的方式和概念。限流尽管有很多优点,但是对于某些项目,缺点也是显而易见的,限流增加了开发和维护的复杂程度、某些情况下会降低用户的体验度、由于需要检查访问次数,可能会影响API站点的性能等。

希望本文对你有所收获,欢迎留言讨论或者吐槽本文。同时欢迎关注“dotnet开发跳槽”公众号的其它文章。

-技术群:添加小编微信并备注进群
小编微信:mm1552923   公众号:dotNet编程大全
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值