翼度科技»论坛 编程开发 .net 查看内容

.NET Core WebApi接口ip限流实践

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
.NET Core WebApi接口ip限流实践

前言

之前一直想实现接口限流,但一直没去实现,然后刚好看到一篇文章是基于AspNetCoreRateLimit 组件的限流策略。这个组件不做多的介绍,想了解详情可以去访问官方网址或者原文地址,地址在文章底部,本文只讲实现。
实现接口限流步骤

导包


第一步 配置服务

由于需要再appsettings.json中去读取数据,所以需要在Program.cs配置文件中配置服务
  1. builder.Services.AddOptions();
复制代码
第二步 写一个扩展方法注册RateLimit相关服务
  1. using StackExchange.Redis;
  2. using AspNetCoreRateLimit;
  3. using AspNetCoreRateLimit.Redis;
  4. namespace AspNetCoreRate
  5. {
  6.     public static class ConfigureRateLimit
  7.     {
  8.         public static void AddRateLimit(this IServiceCollection services,IConfiguration conf)
  9.         {
  10.             services.Configure<IpRateLimitOptions>(conf.GetSection("IpRateLimiting"));
  11.             // 注册 Redis 缓存服务
  12.             services.AddStackExchangeRedisCache(options =>
  13.             {
  14.                 options.Configuration = conf.GetConnectionString("Redis");
  15.             });
  16.             // 注册 Redis 连接服务
  17.             var redisOptions = ConfigurationOptions.Parse(conf.GetConnectionString("Redis"));
  18.             redisOptions.Password = "密码";
  19.             services.AddSingleton<IConnectionMultiplexer>(provider =>
  20.             {
  21.                 return ConnectionMultiplexer.Connect(redisOptions);
  22.             });
  23.             services.AddRedisRateLimiting();
  24.             services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
  25.         }
  26.         public static IApplicationBuilder UseRateLimit(this IApplicationBuilder app)
  27.         {
  28.             app.UseIpRateLimiting();
  29.             return app;
  30.         }
  31.     }
  32. }
复制代码
第三步 注册服务
  1. //注册服务
  2. builder.Services.AddRateLimit(builder.Configuration);
  3. //将内存缓存服务注册到依赖注入容器中,可写可不写。
  4. //builder.Services.AddDistributedMemoryCache();
复制代码
builder.Services.AddDistributedMemoryCache();这个服务,看看chatGPT的回答

如果你不想使用内存缓存,也可以直接移除AddDistributedMemoryCache()服务的注册。在你的Startup.cs文件中,找到ConfigureServices方法,注释掉或者删除以下代码:
  1. services.AddDistributedMemoryCache();
复制代码
这样就可以移除内存缓存服务的注册了。不过,需要注意的是,如果你的Redis出现问题,应用程序将无法使用备用缓存,这可能会影响应用程序的性能和可用性。因此,建议你在使用Redis作为分布式缓存时,仍然注册AddDistributedMemoryCache()服务。
来源:https://www.cnblogs.com/ZYPLJ/archive/2023/03/22/17243389.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具