.NET Core WebApi接口ip限流实践

Posted ZYPLJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET Core WebApi接口ip限流实践相关的知识,希望对你有一定的参考价值。

.NET Core WebApi接口ip限流实践

前言

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

实现接口限流步骤

导包

第一步 配置服务

由于需要再appsettings.json中去读取数据,所以需要在Program.cs配置文件中配置服务

builder.Services.AddOptions();

第二步 写一个扩展方法注册RateLimit相关服务

using StackExchange.Redis;
using AspNetCoreRateLimit;
using AspNetCoreRateLimit.Redis;

namespace AspNetCoreRate

    public static class ConfigureRateLimit
    
        public static void AddRateLimit(this IServiceCollection services,IConfiguration conf)
        
            services.Configure<IpRateLimitOptions>(conf.GetSection("IpRateLimiting"));

            // 注册 Redis 缓存服务
            services.AddStackExchangeRedisCache(options =>
            
                options.Configuration = conf.GetConnectionString("Redis");
            );
            // 注册 Redis 连接服务
            var redisOptions = ConfigurationOptions.Parse(conf.GetConnectionString("Redis"));
            redisOptions.Password = "密码";
            services.AddSingleton<IConnectionMultiplexer>(provider =>
            
                return ConnectionMultiplexer.Connect(redisOptions);
            );
            services.AddRedisRateLimiting();

            services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
        
        public static IApplicationBuilder UseRateLimit(this IApplicationBuilder app)
        
            app.UseIpRateLimiting();
            return app;
        
    

第三步 注册服务

//注册服务
builder.Services.AddRateLimit(builder.Configuration);
//将内存缓存服务注册到依赖注入容器中,可写可不写。
//builder.Services.AddDistributedMemoryCache();

builder.Services.AddDistributedMemoryCache();这个服务,看看chatGPT的回答

如果你不想使用内存缓存,也可以直接移除AddDistributedMemoryCache()服务的注册。在你的Startup.cs文件中,找到ConfigureServices方法,注释掉或者删除以下代码:

services.AddDistributedMemoryCache();

这样就可以移除内存缓存服务的注册了。不过,需要注意的是,如果你的Redis出现问题,应用程序将无法使用备用缓存,这可能会影响应用程序的性能和可用性。因此,建议你在使用Redis作为分布式缓存时,仍然注册AddDistributedMemoryCache()服务。

以上是关于.NET Core WebApi接口ip限流实践的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web API 接口限流

ASP.NET Core WebApi返回结果统一包装实践

WebApi 接口恶意请求限制

Net Core中webapi接口返回结果json化

.Net Core WebApi相关配置包含白名单IP和Port配置

NET CORE 基于缓存策略的SignalR控制推送频率(每多少秒/多少次)API接口控制(限流)...