RateLimitServiceCollectionExtensions.cs 1.5 KB

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