网站首页 网站源码

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Dpz.Core.Infrastructure.RateLimiting;
/// <summary>
/// 限流中间件扩展方法
/// </summary>
public static class RateLimitMiddlewareExtensions
{
/// <summary>
/// 添加IP限流中间件
/// </summary>
public static IApplicationBuilder UseIpRateLimit(this IApplicationBuilder builder)
{
return builder.UseMiddleware<RateLimitMiddleware>();
}
/// <summary>
/// 添加IP限流服务
/// </summary>
public static IServiceCollection AddIpRateLimit(
this IServiceCollection services,
Action<RateLimitConfig>? configureOptions = null
)
{
var config = new RateLimitConfig();
configureOptions?.Invoke(config);
services.AddSingleton(config);
services.AddSingleton<IIpRateLimitService, IpRateLimitService>();
return services;
}
/// <summary>
/// 从配置文件添加IP限流服务
/// </summary>
public static IServiceCollection AddIpRateLimit(
this IServiceCollection services,
IConfiguration configuration,
string sectionName = "RateLimit"
)
{
var config = new RateLimitConfig();
configuration.GetSection(sectionName).Bind(config);
services.AddSingleton(config);
services.AddSingleton<IIpRateLimitService, IpRateLimitService>();
return services;
}
}
上述代码是一个用于实现IP限流功能的中间件扩展方法的实现,主要用于ASP.NET Core应用程序。以下是对代码各部分的详细解释:
namespace Dpz.Core.Infrastructure.RateLimiting
这个命名空间表明该代码属于一个名为Dpz.Core.Infrastructure.RateLimiting的模块,可能是一个基础设施层,用于处理与限流相关的功能。
public static class RateLimitMiddlewareExtensions
这是一个静态类,包含了与IP限流相关的扩展方法。
UseIpRateLimit 方法public static IApplicationBuilder UseIpRateLimit(this IApplicationBuilder builder)
IApplicationBuilder builder - 用于构建应用程序请求处理管道的对象。IApplicationBuilder对象,以便可以继续链式调用。AddIpRateLimit 方法(重载1)public static IServiceCollection AddIpRateLimit(
this IServiceCollection services,
Action<RateLimitConfig>? configureOptions = null
)
Action<RateLimitConfig>委托配置限流的相关选项。IServiceCollection services - 用于注册服务的集合。Action<RateLimitConfig>? configureOptions - 可选的配置委托,用于设置RateLimitConfig的属性。IServiceCollection对象,以便可以继续链式调用。AddIpRateLimit 方法(重载2)public static IServiceCollection AddIpRateLimit(
this IServiceCollection services,
IConfiguration configuration,
string sectionName = "RateLimit"
)
IServiceCollection services - 用于注册服务的集合。IConfiguration configuration - 用于读取配置的对象。string sectionName - 配置节的名称,默认为"RateLimit"。IServiceCollection对象,以便可以继续链式调用。整体来看,这段代码提供了一个灵活的方式来实现IP限流功能。开发者可以通过中间件将其集成到ASP.NET Core应用中,并且可以通过代码或配置文件来配置限流的参数。这种设计使得限流功能的实现既简单又可扩展。
