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.
Action recommandée
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
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions