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>
/// 注册窗口期限流服务,绑定配置节 "RateLimit"
/// 未配置时使用默认值
/// </summary>
public static IServiceCollection AddIpRateLimit(
this IServiceCollection services,
IConfiguration configuration,
string sectionName = "RateLimit"
)
{
var config = new RateLimitConfig();
configuration.GetSection(sectionName).Bind(config);
return AddIpRateLimit(services, config);
}
/// <summary>
/// 注册窗口期限流服务,使用默认配置
/// </summary>
public static IServiceCollection AddIpRateLimit(this IServiceCollection services)
{
return AddIpRateLimit(services, new RateLimitConfig());
}
private static IServiceCollection AddIpRateLimit(
IServiceCollection services,
RateLimitConfig config
)
{
services.AddSingleton(config);
services.AddSingleton<IIpRateLimitService, IpRateLimitService>();
return services;
}
/// <summary>
/// 添加窗口期限流中间件
/// 需先通过 AddIpRateLimit 注册服务
/// </summary>
public static IApplicationBuilder UseIpRateLimit(this IApplicationBuilder builder)
{
return builder.UseMiddleware<RateLimitMiddleware>();
}
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
代码解释
这是一个 ASP.NET Core 限流功能的扩展类,用于简化 IP 限流服务的注册和中间件的使用。
主要功能
1. 服务注册扩展方法
提供了三个重载方法来注册限流服务:
方法一:从配置文件读取配置
AddIpRateLimit(IServiceCollection services, IConfiguration configuration, string sectionName = "RateLimit")
- 从
appsettings.json等配置文件中读取限流配置 - 默认读取
"RateLimit"配置节 - 可自定义配置节名称
方法二:使用默认配置
AddIpRateLimit(IServiceCollection services)
- 使用
RateLimitConfig的默认值 - 适用于快速启用限流功能的场景
私有核心方法
AddIpRateLimit(IServiceCollection services, RateLimitConfig config)
- 实际执行服务注册的核心逻辑
- 注册两个单例服务:
RateLimitConfig:限流配置对象IIpRateLimitService:限流服务实现(IpRateLimitService)
2. 中间件注册扩展方法
UseIpRateLimit(IApplicationBuilder builder)
- 将
RateLimitMiddleware添加到 HTTP 请求管道 - 必须先调用
AddIpRateLimit注册服务
使用示例
Program.cs 中的典型用法
var builder = WebApplication.CreateBuilder(args);
// 方式1: 从配置文件读取
builder.Services.AddIpRateLimit(builder.Configuration);
// 方式2: 使用默认配置
builder.Services.AddIpRateLimit();
var app = builder.Build();
// 启用限流中间件
app.UseIpRateLimit();
app.Run();
配置文件示例 (appsettings.json)
{
"RateLimit": {
"MaxRequests": 100,
"WindowSeconds": 60
}
}
设计特点
- 链式调用:所有方法都返回原对象,支持流式 API 调用
- 单例模式:限流配置和服务使用单例生命周期,提高性能
- 配置灵活:支持配置文件、默认配置、自定义配置节
- 职责分离:配置、服务、中间件分离,符合单一职责原则
这是一个典型的 ASP.NET Core 扩展方法模式,用于简化依赖注入和中间件配置。
AI 正在分析代码…
评论加载中...