using AspNetCoreRateLimit; using FreeRedis; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using ZhonTai.Admin.Tools.Cache; namespace ZhonTai.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 == CacheType.Redis) { //redis var redis = new RedisClient(cacheConfig.Redis.ConnectionStringRateLimit) { Serialize = JsonConvert.SerializeObject, Deserialize = JsonConvert.DeserializeObject }; services.AddSingleton(new DistributedCache(redis)); services.AddDistributedRateLimiting(); } else { //内存 services.AddMemoryCache(); services.AddInMemoryRateLimiting(); } services.AddSingleton(); #endregion IP限流 } }