ConcurrencyLimiterMiddleware 已淘汰
ConcurrencyLimiterMiddleware 及其相關聯的方法和類型已標示為已淘汰。
如果您需要速率限制功能,請切換至 .NET 7 中引進的較新且功能更高的速率限制中介軟體 (例如,RateLimiterApplicationBuilderExtensions.UseRateLimiter)。 .NET 7 速率限制 API 包含並行限制器和數個可套用至應用程式的其他速率限制演算法。
導入的版本
ASP.NET Core 8.0 Preview 4
先前的行為
開發人員可以使用 ConcurrencyLimiterMiddleware 將原則新增至相依性插入 #DI,並啟用中介軟體來控制並行:
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();
新的行為
如果您在程式碼中使用受影響的 API ,您會在編譯時期收到警告 CS0618
。
中斷性變更的類型
這項變更會影響來源相容性。
變更原因
ConcurrencyLimiterMiddleware 不常使用且未記載。 較新的速率限制 API 具有更廣泛的功能。
建議的動作
如果您使用較舊的 ConcurrencyLimiterMiddleware,建議您移至較新的速率限制中介軟體。 以下是較新 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
- Microsoft.AspNetCore.Builder.ConcurrencyLimiterExtensions.UseConcurrencyLimiter(IApplicationBuilder)
- Microsoft.AspNetCore.ConcurrencyLimiter.ConcurrencyLimiterMiddleware
- System.Threading.RateLimiting.ConcurrencyLimiterOptions