From a8bdbaf27b2c5bac467a683821ffaaea3a35e76d Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Fri, 31 May 2024 13:40:00 +0800 Subject: [PATCH] =?UTF-8?q?.net8=20=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebExtensions/IPRateExtension.cs | 33 +++++++++++++++++++ Infrastructure/ZR.Infrastructure.csproj | 1 + ZR.Admin.WebApi/Program.cs | 7 ++-- 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 Infrastructure/WebExtensions/IPRateExtension.cs diff --git a/Infrastructure/WebExtensions/IPRateExtension.cs b/Infrastructure/WebExtensions/IPRateExtension.cs new file mode 100644 index 0000000..bf7e45d --- /dev/null +++ b/Infrastructure/WebExtensions/IPRateExtension.cs @@ -0,0 +1,33 @@ +using AspNetCoreRateLimit; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; + +namespace ZR.Infrastructure.WebExtensions +{ + public static class IPRateExtension + { + public static void AddIPRate(this IServiceCollection services, IConfiguration configuration) + { + if (services == null) throw new ArgumentNullException(nameof(services)); + + //从appsettings.json中加载常规配置,IpRateLimiting与配置文件中节点对应 + services.Configure(configuration.GetSection("IpRateLimiting")); + + //从appsettings.json中加载Ip规则 + services.Configure(configuration.GetSection("IpRateLimitPolicies")); + //注入计数器和规则存储 + services.AddSingleton(); + services.AddSingleton(); + //配置(解析器、计数器密钥生成器) + services.AddSingleton(); + services.AddSingleton(); + + services.AddRateLimiter(limiterOptions => + { + // 配置限流策略 + }); + } + } +} diff --git a/Infrastructure/ZR.Infrastructure.csproj b/Infrastructure/ZR.Infrastructure.csproj index 3fff5a3..8f2e8fb 100644 --- a/Infrastructure/ZR.Infrastructure.csproj +++ b/Infrastructure/ZR.Infrastructure.csproj @@ -12,6 +12,7 @@ + diff --git a/ZR.Admin.WebApi/Program.cs b/ZR.Admin.WebApi/Program.cs index 5fa733b..15d34c7 100644 --- a/ZR.Admin.WebApi/Program.cs +++ b/ZR.Admin.WebApi/Program.cs @@ -1,4 +1,4 @@ - +using AspNetCoreRateLimit; using Infrastructure.Converter; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; @@ -32,7 +32,7 @@ builder.Services.AddDataProtection() //普通验证码 builder.Services.AddCaptcha(builder.Configuration); //IPRatelimit - +builder.Services.AddIPRate(builder.Configuration); //builder.Services.AddSession(); builder.Services.AddHttpContextAccessor(); @@ -125,7 +125,8 @@ if (builder.Environment.IsProduction()) //使用swagger app.UseSwagger(); //启用客户端IP限制速率 - +app.UseIpRateLimiting(); +app.UseRateLimiter(); //设置socket连接 app.MapHub("/msgHub");