我已经使用 Ratelimit 从 3.0.5 更新到 4.0.1 并且我收到错误“'无法解析类型'AspNetCoreRateLimit.IProcessingStrategy'的服务同时尝试激活'AspNetCoreRateLimit.IpRateLimitMiddleware”,我可以得到一个答案已更改或添加到 4.0.1 以导致此错误发生?我应该注册一个新的服务吗?
这个问题折腾了半天,原来是需要注入处理策略,如下(红色部分代码):
//需要从加载配置文件appsettings.json
services.AddOptions();
//需要存储速率限制计算器和ip规则
services.AddMemoryCache();
//从appsettings.json中加载常规配置
services.Configure<ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
//从appsettings.json中加载客户端规则
services.Configure<ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
//4.0后,必须注入处理策略
services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
//注入计数器和规则存储
services.AddSingleton<IClientPolicyStore, MemoryCacheClientPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
注意以上红色部分代码。