我正在尝试将速率限制中间件添加到我的 ASP.NET Core MVC Web 应用程序中。
我添加了一个全局和分区的
FixedWindowLimiter
via
services.AddRateLimiter(...)
并使用
激活它app.UseRateLimiter()
我有一个控制器,它不能受到速率限制,因此我在该控制器上添加了属性
[DisableRateLimiting]
。但是,这个属性被中间件忽略了,我不知道为什么会发生这种情况。
文档中写道,必须在
app.UseRouting()
之前调用app.UseRateLimiter()
。我不使用app.UseRouting()
,
但是app.UseMvc(...)
,这是管道中的最后一个。
当我将
app.UseRateLimiter()
放在app.UseMvc(...)
之后时,全局速率限制器不起作用。否则,控制器上的属性不起作用。
从app.UseMvc()切换到app.UseRouting()和app.UseEndpoints()。这与速率限制器所需的中间件管道一致,并确保管道顺序正确:
app.UseRouting();
app.UseRateLimiter();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
这应该可以修复全局速率限制器和 [DisableRateLimiting] 属性。