ASP.NET CORE 6.0实现接口限速

一、添加AspNetCoreRateLimit包

二、在appsettings.json添加限流配置

  //限流配置
  "IpRateLimiting": {
    // 是否启用按终结点进行速率限制
    "EnableEndpointRateLimiting": true,

    // 是否堆叠被阻止的请求
    "StackBlockedRequests": false,

    // 实际 IP 头标识,用于从请求中获取客户端真实 IP 地址
    "RealIPHeader": "X-Real-IP",

    // 客户端 ID 头标识,用于标识不同的客户端
    "ClientIdHeader": "X-ClientId",

    // 速率限制超过限制时返回的 HTTP 状态码
    "HttpStatusCode": 429,

    // 通用规则,适用于所有终结点
    "GeneralRules": [
      {
        // 终结点名称,* 表示所有终结点
        "Endpoint": "*",

        // 限制周期,以秒为单位
        "Period": "1s",

        // 在限制周期内允许的最大请求数
        "Limit": 5
      },
      {
        "Endpoint": "get:/Student/All",
        "Period": "5s",
        "Limit": 1
      }
    ],
    //拦截时返回参数
    "QuotaExceededResponse": {
      //返回内容
      "Content": "{{ \"success\": false, \"resultCode\": 105, \"resultDesc\": \"频繁请求,请稍后在试\"}}",
      //格式
      "ContentType": "application/json",
      //状态码
      "StatusCode": "200"
    }
  }

上述的配置代表1秒钟内最多允许发起 5 个请求。
“get:/Student/All” 代表指定路径5秒钟内最多允许发起1 个Get请求

三、在Program.cs配置IP限速 

#region 配置IP 限速
// Github项目地址:https://github.com/stefanprodan/AspNetCoreRateLimit
// 文档:https://github.com/stefanprodan/AspNetCoreRateLimit/wiki/IpRateLimitMiddleware#setup
builder.Services.AddOptions();  // 添加配置选项服务
builder.Services.AddMemoryCache();  // 添加内存缓存服务
builder.Services.Configure<IpRateLimitOptions>(configuration.GetSection("IpRateLimiting"));  // 配置IP限速选项,使用名为 "IpRateLimiting" 的配置节
builder.Services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();  // 注册单例模式的 IIpPolicyStore 服务,使用内存缓存实现
builder.Services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();  // 注册单例模式的 IRateLimitCounterStore 服务,使用内存缓存实现
builder.Services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();  // 注册单例模式的 IProcessingStrategy 服务,使用异步键锁处理策略实现
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();  // 注册单例模式的 IRateLimitConfiguration 服务,使用 RateLimitConfiguration 实现
#endregion

启用IP限速

#region 启用 IP 限速
app.UseIpRateLimiting();
#endregion

四、效果展示

在5秒内请求了大于1次就会提示“频繁请求,请稍后在试”

在5秒内请求了1次,就会正常响应

上面是指定路径,其他路径的接口都是“按照1秒钟内最多允许发起 5 个请求”为规则,大家可以自行测试一下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值