ConcurrencyLimiterMiddleware jest przestarzałe
ConcurrencyLimiterMiddleware i skojarzone z nimi metody i typy zostały oznaczone jako przestarzałe.
Jeśli potrzebujesz możliwości ograniczania szybkości, przejdź do nowszego i bardziej zdolnego oprogramowania pośredniczącego, które zostało wprowadzone na platformie .NET 7 (na przykład RateLimiterApplicationBuilderExtensions.UseRateLimiter). Interfejs API ograniczania szybkości platformy .NET 7 zawiera ogranicznik współbieżności i kilka innych algorytmów ograniczania szybkości, które można zastosować do aplikacji.
Wprowadzona wersja
ASP.NET Core 8.0 (wersja zapoznawcza 4)
Poprzednie zachowanie
Deweloperzy mogą kontrolować ConcurrencyLimiterMiddleware współbieżność, dodając zasady do wstrzykiwania zależności (DI) i włączając oprogramowanie pośredniczące:
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();
Nowe zachowanie
Jeśli używasz interfejsów API, których dotyczy problem w kodzie, w czasie kompilacji zostanie wyświetlone ostrzeżenie CS0618
.
Typ zmiany powodującej niezgodność
Ta zmiana ma wpływ na zgodność ze źródłem.
Przyczyna wprowadzenia zmiany
ConcurrencyLimiterMiddleware jest rzadko używany i nieudokumentowany. Nowszy interfejs API ograniczania szybkości ma bardziej rozbudowane funkcje.
Zalecana akcja
Jeśli używasz starszego ConcurrencyLimiterMiddlewareprogramu , zalecamy przejście do nowszego oprogramowania pośredniczącego ograniczającego szybkość. Oto przykład użycia nowszego interfejsu 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();
Dotyczy interfejsów API
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions