ConcurrencyLimiterMiddleware está obsoleto

ConcurrencyLimiterMiddleware y sus métodos y tipos asociados se han marcado como obsoletos.

Si necesita funcionalidades de limitación de velocidad, cambie al middleware de limitación de velocidad más reciente y compatible que se introdujo en .NET 7 (por ejemplo, RateLimiterApplicationBuilderExtensions.UseRateLimiter). La API de limitación de velocidad de .NET 7 incluye un limitador de simultaneidad y otros algoritmos de limitación de velocidad que se pueden aplicar a la aplicación.

Versión introducida

ASP.NET Core 8.0 (versión preliminar 4)

Comportamiento anterior

Los desarrolladores pueden usar ConcurrencyLimiterMiddleware para controlar la simultaneidad agregando una directiva a la inserción de dependencias (DI) y habilitando el 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();

Comportamiento nuevo

Si usa las API afectadas en el código, recibirá una advertencia CS0618 en tiempo de compilación.

Tipo de cambio importante

Este cambio afecta a la compatibilidad de origen.

Motivo del cambio

ConcurrencyLimiterMiddleware se usa con poca frecuencia y no está documentado. La API de limitación de velocidad más reciente tiene una funcionalidad más amplia.

Si usa la versión anterior de ConcurrencyLimiterMiddleware, se recomienda pasar al middleware de limitación de velocidad más reciente. Este es un ejemplo de uso de la API más reciente, 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 afectadas

Consulte también