ConcurrencyLimiterMiddleware is verouderd
ConcurrencyLimiterMiddleware en de bijbehorende methoden en typen zijn gemarkeerd als verouderd.
Als u mogelijkheden voor snelheidsbeperking nodig hebt, schakelt u over naar de nieuwere en meer geschikte middleware voor snelheidsbeperking die is geïntroduceerd in .NET 7 (bijvoorbeeld RateLimiterApplicationBuilderExtensions.UseRateLimiter). De .NET 7 rate-limiting-API bevat een gelijktijdigheidsbeperkingslimiet en verschillende andere algoritmen voor snelheidsbeperking die u op uw toepassing kunt toepassen.
Versie geïntroduceerd
ASP.NET Core 8.0 Preview 4
Vorig gedrag
Ontwikkelaars kunnen gebruiken ConcurrencyLimiterMiddleware om gelijktijdigheid te beheren door een beleid toe te voegen aan afhankelijkheidsinjectie (DI) en de middleware in te schakelen:
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();
Nieuw gedrag
Als u de betrokken API's in uw code gebruikt, krijgt u een waarschuwing CS0618
tijdens het compileren.
Type wijziging die fouten veroorzaken
Deze wijziging is van invloed op de broncompatibiliteit.
Reden voor wijziging
ConcurrencyLimiterMiddleware wordt niet vaak gebruikt en niet-gedocumenteerd. De nieuwere frequentiebeperkings-API heeft uitgebreidere functionaliteit.
Aanbevolen actie
Als u de oudere ConcurrencyLimiterMiddlewaregebruikt, raden we u aan over te stappen op de nieuwere snelheidsbeperkings-middleware. Hier volgt een voorbeeld van het gebruik van de nieuwere 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();
Betrokken API's
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions