using AspNetCoreRateLimit;
using FreeRedis;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using ZhonTai.Admin.Tools.Cache;
namespace ZhonTai.Admin.Core.Extensions;
public static class RateLimitServiceCollectionExtensions
{
///
/// 添加Ip限流
///
///
///
///
public static void AddIpRateLimit(this IServiceCollection services, IConfiguration configuration, CacheConfig cacheConfig)
{
#region IP限流
services.Configure(configuration.GetSection("IpRateLimiting"));
services.Configure(configuration.GetSection("IpRateLimitPolicies"));
if (cacheConfig.TypeRateLimit == CacheType.Redis)
{
//redis
var redis = new RedisClient(cacheConfig.Redis.ConnectionStringRateLimit)
{
Serialize = JsonConvert.SerializeObject,
Deserialize = JsonConvert.DeserializeObject
};
services.AddSingleton(new DistributedCache(redis));
services.AddDistributedRateLimiting();
}
else
{
//内存
services.AddMemoryCache();
services.AddInMemoryRateLimiting();
}
services.AddSingleton();
#endregion IP限流
}
}