Ape.Volo项目采用AspNetCoreRateLimit包支持接口限流,避免恶意请求。添加并安装AspNetCoreRateLimit包的是Ape.Volo.Common项目,但定义注册和使用限流组件相关类的是Ape.Volo.Infrastructure项目,而Ape.Volo.Api项目则在启动时调用限流组件及配置限流策略。
Ape.Volo.Api项目的appsettings.json文件的Middleware节中的IpLimit部分配置是否启用限流功能,同时在IpRateLimit.json文件中设置通用限流规则及限流策略,包括请求白名单、通用请求限制规则、针对本机访问的限流策略等。

Ape.Volo.Api项目的program文件开头调用ConfigureAppConfiguration函数加载IpRateLimit.json文件以便后续读取其中的设置,接着调用Ape.Volo.Infrastructure项目的IpRateLimitSetup. AddIpStrategyRateLimitSetup扩展函数注册限流组件,最后调用同项目中的IpLimitMiddleware. UseIpLimitMiddleware扩展函数启用限流组件。

Ape.Volo.Infrastructure项目的IpRateLimitSetup.AddIpStrategyRateLimitSetup扩展函数如下所示,首先读取限流配置及策略,同时从appsettings.json文件的System节获取是否启用Redis缓存,如果启用则注册分布式限流相关的接口及实现类,否则注册内存限流相关的接口及实现类,最终注册与限流算法及限流配置相关的接口及实现类。

Ape.Volo.Infrastructure项目的IpRateLimitSetup.UseIpLimitMiddleware扩展函数如下所示,逻辑比较简单,根据Ape.Volo.Api项目的appsettings.json文件的Middleware节中的IpLimit值判断是否启用限流组件。

参考文献:
1\]https://github.com/xianhc/ape-volo-web \[2\]https://github.com/xianhc/ape-volo-admin \[3\]http://doc.apevolo.com/ \[4\]https://cn.vuejs.org/