RateLimitServiceCollectionExtensions.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using AspNetCoreRateLimit;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using Microsoft.Extensions.Caching.Distributed;
  5. using Microsoft.Extensions.Caching.Redis;
  6. using Admin.Core.Common.Configs;
  7. namespace Admin.Core.Extensions
  8. {
  9. public static class RateLimitServiceCollectionExtensions
  10. {
  11. /// <summary>
  12. /// 添加Ip限流
  13. /// </summary>
  14. /// <param name="services"></param>
  15. /// <param name="configuration"></param>
  16. /// <param name="cacheConfig"></param>
  17. public static void AddIpRateLimit(this IServiceCollection services, IConfiguration configuration, CacheConfig cacheConfig)
  18. {
  19. #region IP限流
  20. services.Configure<IpRateLimitOptions>(configuration.GetSection("IpRateLimiting"));
  21. services.Configure<IpRateLimitPolicies>(configuration.GetSection("IpRateLimitPolicies"));
  22. if (cacheConfig.TypeRateLimit == Common.Cache.CacheType.Redis)
  23. {
  24. //redis
  25. var redisRateLimit = new CSRedis.CSRedisClient(cacheConfig.Redis.ConnectionStringRateLimit);
  26. services.AddSingleton<IDistributedCache>(new CSRedisCache(redisRateLimit));
  27. services.AddSingleton<IIpPolicyStore, DistributedCacheIpPolicyStore>();
  28. services.AddSingleton<IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>();
  29. }
  30. else
  31. {
  32. //内存
  33. services.AddMemoryCache();
  34. services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
  35. services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
  36. }
  37. services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
  38. #endregion
  39. }
  40. }
  41. }