IPRateExtension.cs 1.3 KB

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