Delen via


ConcurrencyLimiterMiddleware is verouderd

ConcurrencyLimiterMiddleware en de bijbehorende methoden en typen zijn gemarkeerd als verouderd.

Als u mogelijkheden voor snelheidsbeperking nodig hebt, schakelt u over naar de nieuwere en meer geschikte middleware voor snelheidsbeperking die is geïntroduceerd in .NET 7 (bijvoorbeeld RateLimiterApplicationBuilderExtensions.UseRateLimiter). De .NET 7 rate-limiting-API bevat een gelijktijdigheidsbeperkingslimiet en verschillende andere algoritmen voor snelheidsbeperking die u op uw toepassing kunt toepassen.

Versie geïntroduceerd

ASP.NET Core 8.0 Preview 4

Vorig gedrag

Ontwikkelaars kunnen gebruiken ConcurrencyLimiterMiddleware om gelijktijdigheid te beheren door een beleid toe te voegen aan afhankelijkheidsinjectie (DI) en de middleware in te schakelen:

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

Nieuw gedrag

Als u de betrokken API's in uw code gebruikt, krijgt u een waarschuwing CS0618 tijdens het compileren.

Type wijziging die fouten veroorzaken

Deze wijziging is van invloed op de broncompatibiliteit.

Reden voor wijziging

ConcurrencyLimiterMiddleware wordt niet vaak gebruikt en niet-gedocumenteerd. De nieuwere frequentiebeperkings-API heeft uitgebreidere functionaliteit.

Als u de oudere ConcurrencyLimiterMiddlewaregebruikt, raden we u aan over te stappen op de nieuwere snelheidsbeperkings-middleware. Hier volgt een voorbeeld van het gebruik van de nieuwere 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();

Betrokken API's

Zie ook