IPRateExtension.cs 1.2 KB

123456789101112131415161718192021222324252627
  1. using AspNetCoreRateLimit;
  2. using Microsoft.Extensions.Configuration;
  3. using Microsoft.Extensions.DependencyInjection;
  4. using System;
  5. namespace ZR.Admin.WebApi.Extensions
  6. {
  7. public static class IPRateExtension
  8. {
  9. public static void AddIPRate(this IServiceCollection services, IConfiguration configuration)
  10. {
  11. if (services == null) throw new ArgumentNullException(nameof(services));
  12. //从appsettings.json中加载常规配置,IpRateLimiting与配置文件中节点对应
  13. services.Configure<IpRateLimitOptions>(configuration.GetSection("IpRateLimiting"));
  14. //从appsettings.json中加载Ip规则
  15. services.Configure<IpRateLimitPolicies>(configuration.GetSection("IpRateLimitPolicies"));
  16. //注入计数器和规则存储
  17. services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
  18. services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
  19. //配置(解析器、计数器密钥生成器)
  20. services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
  21. services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
  22. }
  23. }
  24. }