1
0

RateLimitServiceCollectionExtensions.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Admin.Core.Common.Configs;
  2. using AspNetCoreRateLimit;
  3. using Microsoft.Extensions.Caching.Distributed;
  4. using Microsoft.Extensions.Caching.Redis;
  5. using Microsoft.Extensions.Configuration;
  6. using Microsoft.Extensions.DependencyInjection;
  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.AddDistributedRateLimiting();
  28. }
  29. else
  30. {
  31. //内存
  32. services.AddMemoryCache();
  33. services.AddInMemoryRateLimiting();
  34. }
  35. services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
  36. #endregion IP限流
  37. }
  38. }
  39. }