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

另请参阅