我正在尝试将速率限制中间件添加到我的 .NET Core MVC Web 应用程序中。
我通过 services.AddRateLimiter(...) 添加全局和分区的 FixWindowLimiter 并通过 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] 属性。