| using Microsoft.AspNetCore.Http; | 
| using Microsoft.Extensions.Configuration; | 
| using Microsoft.Extensions.DependencyInjection; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
|   | 
| namespace WIDESEA_Core.Extensions | 
| { | 
|     /// <summary> | 
|     /// IPLimit限流 启动服务 | 
|     /// </summary> | 
|     public static class IpPolicyRateLimitSetup | 
|     { | 
|         public static void AddIpPolicyRateLimitSetup(this IServiceCollection services, IConfiguration Configuration) | 
|         { | 
|             if (services == null) throw new ArgumentNullException(nameof(services)); | 
|   | 
|             // needed to store rate limit counters and ip rules | 
|             //services.AddMemoryCache(); | 
|   | 
|             //load general configuration from appsettings.json | 
|             //services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting")); | 
|   | 
|             // inject counter and rules stores | 
|             //services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>(); | 
|             //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>(); | 
|             //services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>(); | 
|   | 
|             // inject counter and rules distributed cache stores | 
|             //services.AddSingleton<IIpPolicyStore, DistributedCacheIpPolicyStore>(); | 
|             //services.AddSingleton<IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>(); | 
|   | 
|             // the clientId/clientIp resolvers use it. | 
|             //services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); | 
|   | 
|             // configuration (resolvers, counter key builders) | 
|             //services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>(); | 
|         } | 
|     } | 
| } |