1
0

RateLimitServiceCollectionExtensions.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using AspNetCoreRateLimit;
  2. using FreeRedis;
  3. using Microsoft.Extensions.Caching.Distributed;
  4. using Microsoft.Extensions.Configuration;
  5. using Microsoft.Extensions.DependencyInjection;
  6. using Newtonsoft.Json;
  7. using ZhonTai.Admin.Tools.Cache;
  8. namespace ZhonTai.Admin.Core.Extensions;
  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 == CacheType.Redis)
  23. {
  24. //redis
  25. var redis = new RedisClient(cacheConfig.Redis.ConnectionStringRateLimit)
  26. {
  27. Serialize = JsonConvert.SerializeObject,
  28. Deserialize = JsonConvert.DeserializeObject
  29. };
  30. services.AddSingleton<IDistributedCache>(new DistributedCache(redis));
  31. services.AddDistributedRateLimiting();
  32. }
  33. else
  34. {
  35. //内存
  36. services.AddMemoryCache();
  37. services.AddInMemoryRateLimiting();
  38. }
  39. services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
  40. #endregion IP限流
  41. }
  42. }