.Net Core使用AspNetCoreRateLimit实现限流

摘要:
1.添加Nuget包。2.启动时配置[两种模式可以存储在Redis的内存中]//配置服务。AddOptions()需要从appsettings加载。json//在内存服务中存储IP计数器。AddMemoryCache()//或存储在Redis//服务中。AddDistributedRedisCache(选项=˃{//o

1.添加Nuget程序包

.Net Core使用AspNetCoreRateLimit实现限流第1张

 2.在start up中进行配置【有两种模式可选 存储在redis中会哦这内存中】

// 需要从appsettings.json中加载配置

            services.AddOptions();

            // 存储IP计数器在内存中

            services.AddMemoryCache();
           //或者存储在redis中

  //services.AddDistributedRedisCache(options =>{

//options.Configuration = "119.45.138.19:6379,password=123456,connectTimeout=5000,syncTimeout=10000";

             //options.InstanceName = "WebRatelimit";
             //});


            services.Configure<IpRateLimitOptions>(Configuration.GetSection("RateLimitingConfig"));

            services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();

            services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
     
             services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
  
             services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();

3.在appsetting.json中配置相关参数

  "RateLimitingConfig": {
    //false则全局将应用限制,并且仅应用具有作为端点的规则* 。 true则限制将应用于每个端点
    "EnableEndpointRateLimiting": true,
    //false则拒绝的API调用不会添加到调用次数计数器上  
    "StackBlockedRequests": false,
    //获取用户端的真实IP
    "RealIpHeader": "X-Real-IP",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 200,
    "QuotaExceededResponse": {
      "Content": "{{"code":429,"msg":"Visit too frequently, please try again later","data":null}}",
      "ContentType": "application/json",
      "StatusCode": 200
    },
   //ip白名单
    "IpWhitelist": [ "139.159.187.209" ],
    "EndpointWhitelist": [],
    "ClientWhitelist": [],
    "GeneralRules": [
      {
        "Endpoint": "*",
        "Period": "60s",
        "Limit": 0
      }
    ]
  }

4.启用配置

//位置放在控制器前面
app.UseIpRateLimiting();

免责声明:文章转载自《.Net Core使用AspNetCoreRateLimit实现限流》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS 7 YUM和离线RPM包 升级 Linux 内核UVM基础之---------Reporting Classes下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

循序渐进学.Net Core Web Api开发系列【11】:依赖注入

系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一、概述 本篇介绍如何采用依赖注入的方式创建和使用对象,主要从应用层面进行描述,不涉及具体的内部原理。 二、演练 假设要做一个日志服务的类,它实现在控制台打印出带时间信息的日志信...

在.NET Core 中实现健康检查

.NET Core中提供了开箱即用的运行状况检查,首先,我将在.NET Core API应用程序中执行运行状况检查,接下来,我们将使用DbContext集成SQL Server或数据库的运行状况检查,最后是如何实现自定义服务的运行状况检查。 在ASP.NET Core中实现健康检查 要实现运行状况检查,您需要在项目中安装 Microsoft.AspNet...

.NET core ABP 获取远程IP地址

2、asp.net core 2.x上配置 第一步:在控制器中定义变量 private IHttpContextAccessor _accessor; 第二步: 控制器的构造函数进行注入 public ValuesController(IHttpContextAccessor accessor) { _accessor = accessor; }...

BlueTooth作为center使用总结

概述 每个外部蓝牙设备有自己的UUID。 每个蓝牙设备可能有多个server,每个server可能有多个characteristic,每个server和characteristic都有自己的UUID。 建立centerManager myCentralManager = [[CBCentralManager alloc] initWithDelegate:...

Window Services的调试和非托管dll的引用及其他一些注意问题

一个asp.net项目,客户提出需求,需要增加即时短信提醒功能;因为项目中使用到GPRS模块做无线通讯,还可以用作发送短信,就用了这个GPRS模块发短信提醒;这个即时短信提醒功能,计划用window services实现;然后修改表结构,开始window services的代码编写。代码编写完成后,开始调试。测试时才发现,window services测试...

分布式环境下限流方案的实现redis RateLimiter Guava,Token Bucket, Leaky Bucket

  业务背景介绍 对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧。 在日常生活中,我们肯定收到过不少不少这样的短信,“双11约吗?,千款….”,“您有幸获得唱读卡,赶快戳链接…”。这种类型的短信是属于推广性质的短信。为什么我要说这个呢?听我慢慢道来。 一般而言,对于推广营销类短信,它们针对某一群体...