Partager via


ConcurrencyLimiterMiddleware est obsolète

ConcurrencyLimiterMiddleware et ses méthodes et types associés ont été marqués comme obsolètes.

Si vous avez besoin de fonctionnalités de limitation de débit, basculez vers le middleware de limitation de débit plus récent et plus capable qui a été introduit dans .NET 7 (par exemple, RateLimiterApplicationBuilderExtensions.UseRateLimiter). L’API de limitation de débit .NET 7 inclut un limiteur d’accès concurrentiel et plusieurs autres algorithmes de limitation de débit que vous pouvez appliquer à votre application.

Version introduite

ASP.NET Core 8.0 Preview 4

Comportement précédent

Les développeurs peuvent utiliser ConcurrencyLimiterMiddleware pour contrôler la concurrence en ajoutant une stratégie à l’injection de dépendances (DI) et en activant l’intergiciel :

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

Nouveau comportement

Si vous utilisez les API affectées dans votre code, vous recevez un avertissement CS0618 au moment de la compilation.

Type de changement cassant

Cette modification affecte la compatibilité de la source.

Raison de la modification

ConcurrencyLimiterMiddleware est rarement utilisé et non documenté. L’API de limitation de débit plus récente offre des fonctionnalités plus étendues.

Si vous utilisez l’ancien ConcurrencyLimiterMiddleware, nous vous recommandons de passer à l’intergiciel de limitation de débit plus récent. Voici un exemple d’utilisation de l’API plus récente : 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 affectées

Voir aussi