Dela via


ConcurrencyLimiterMiddleware är föråldrat

ConcurrencyLimiterMiddleware och dess associerade metoder och typer har markerats som föråldrade.

Om du behöver hastighetsbegränsningsfunktioner växlar du till det nyare och mer kompatibla hastighetsbegränsande mellanprogrammet som introducerades i .NET 7 (till exempel RateLimiterApplicationBuilderExtensions.UseRateLimiter). .NET 7-hastighetsbegränsnings-API:et innehåller en samtidighetsbegränsare och flera andra hastighetsbegränsningsalgoritmer som du kan använda för ditt program.

Version introducerad

ASP.NET Core 8.0 Förhandsversion 4

Tidigare beteende

Utvecklare kan använda ConcurrencyLimiterMiddleware för att kontrollera samtidighet genom att lägga till en princip i beroendeinmatning (DI) och aktivera mellanprogrammet:

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();

Nytt beteende

Om du använder de berörda API:erna i koden får du en varning CS0618 vid kompileringstillfället.

Typ av icke-bakåtkompatibel ändring

Den här ändringen påverkar källkompatibiliteten.

Orsak till ändringen

ConcurrencyLimiterMiddleware används sällan och är odokumenterad. Det nyare hastighetsbegränsnings-API:et har mer omfattande funktioner.

Om du använder den äldre ConcurrencyLimiterMiddlewarerekommenderar vi att du flyttar till det nyare hastighetsbegränsande mellanprogrammet. Här är ett exempel på användning av det nyare API:et: 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();

Berörda API:er

Se även