using Admin.Core.Common.Configs; using AspNetCoreRateLimit; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Caching.Redis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace Admin.Core.Extensions { public static class RateLimitServiceCollectionExtensions { /// /// 添加Ip限流 /// /// /// /// public static void AddIpRateLimit(this IServiceCollection services, IConfiguration configuration, CacheConfig cacheConfig) { #region IP限流 services.Configure(configuration.GetSection("IpRateLimiting")); services.Configure(configuration.GetSection("IpRateLimitPolicies")); if (cacheConfig.TypeRateLimit == Common.Cache.CacheType.Redis) { //redis var redisRateLimit = new CSRedis.CSRedisClient(cacheConfig.Redis.ConnectionStringRateLimit); services.AddSingleton(new CSRedisCache(redisRateLimit)); services.AddDistributedRateLimiting(); } else { //内存 services.AddMemoryCache(); services.AddInMemoryRateLimiting(); } services.AddSingleton(); #endregion IP限流 } } }