Partager via


ConcurrencyLimiterMiddleware obsolète

ConcurrencyLimiterMiddleware et les 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 plus récent et plus performant qui a été introduit dans .NET 7 (par exemple RateLimiterApplicationBuilderExtensions.UseRateLimiter). L’API de limitation de débit .NET 7 comprend un limiteur d’accès concurrentiel et d’autres algorithmes de limitation de débit que vous pouvez mettre en œuvre dans votre application.

Version introduite

ASP.NET Core 8.0 Preview 4

Comportement précédent

Les développeurs pouvaient utiliser ConcurrencyLimiterMiddleware pour contrôler la concurrence en ajoutant une stratégie à l’injection de dépendances et en activant le middleware :

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

Ce changement affecte la compatibilité de la source.

Raison du changement

ConcurrencyLimiterMiddleware est rarement utilisé et non documenté. La nouvelle API de limitation de débit possède des fonctionnalités plus étendues.

Si vous utilisez l’ancien ConcurrencyLimiterMiddleware, nous vous recommandons de passer au dernier middleware à limitation de débit. Voici un exemple d’utilisation de la nouvelle 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 affectées

Voir aussi