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.
Acción recomendada
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
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions