ConcurrencyLimiterMiddleware 已过时
ConcurrencyLimiterMiddleware 及其关联的方法和类型已标记为已过时。
如果需要速率限制功能,请切换到 .NET 7 中引入的更新且功能更强大的速率限制中间件(例如 RateLimiterApplicationBuilderExtensions.UseRateLimiter)。 .NET 7 速率限制 API 包括一个并发限制器和一些可应用于应用程序的其他速率限制算法。
引入的版本
ASP.NET Core 8.0 预览版 4
旧行为
开发人员可以通过 ConcurrencyLimiterMiddleware 将策略添加到依赖项注入 (DI) 并启用中间件来控制并发:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddStackPolicy<options => {
options.MaxConcurrentRequests = 2;
options.RequestQueueLimit = 25;
});
var app = builder.Build();
app.UseConcurrencyLimiter();
// Map endpoints.
app.Run();
新行为
如果在代码中使用受影响的 API,则编译时会收到警告 CS0618
。
中断性变更的类型
此更改会影响源兼容性。
更改原因
ConcurrencyLimiterMiddleware 不常使用且未记录。 较新的速率限制 API 具有更广泛的功能。
建议的操作
如果使用的是较旧的 ConcurrencyLimiterMiddleware,建议迁移到较新的速率限制中间件。 下面是较新 API RateLimiterApplicationBuilderExtensions.UseRateLimiter 的示例用法:
using Microsoft.AspNetCore.RateLimiting;
using System.Threading.RateLimiting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseRateLimiter(new RateLimiterOptions()
.AddConcurrencyLimiter("only-one-at-a-time-stacked", (options) =>
{
options.PermitLimit = 2;
options.QueueLimit = 25;
options.QueueProcessingOrder = QueueProcessingOrder.NewestFirst;
}));
app.MapGet("/", async () =>
{
await Task.Delay(10000);
return "Hello World";
}).RequireRateLimiting("only-one-at-a-time-stacked");
app.Run();
受影响的 API
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions