aspnet / Announcements

Subscribe to this repo to be notified about major changes in ASP.NET Core and Entity Framework Core
Other
1.66k stars 80 forks source link

[Breaking change]: ASP.NET Core rate limiting middleware now requires AddRateLimiter #506

Open JamesNK opened 1 year ago

JamesNK commented 1 year ago

Description

ASP.NET Core rate limiting middleware is being updated in .NET 8 with extra functionality. The middleware now requires services registered with AddRateLimiter.

Version

.NET 8 Preview 5

Previous behavior

Previously, rate limiting could be used without AddRateLimiter. For example, the middleware could be configured by calling Configure<RateLimiterOptions>(o => { }):

var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<RateLimiterOptions>(o => o
    .AddFixedWindowLimiter(policyName: "fixed", options =>
    {
        // configuration
    }));

var app = builder.Build();
app.UseRateLimiter();
app.MapGet("/", () => Results.Ok($"Hello world")).RequireRateLimiting("fixed");
app.Run();

New behavior

If AddRateLimiter is not called on app startup, then ASP.NET Core will throw an informative error:

Unable to find the required services. Please add all the required services by calling 'IServiceCollection.AddRateLimiter' in the application startup code.

Type of breaking change

Reason for change

Rate limiting middleware requires services that are only registered by calling AddRateLimiter.

Recommended action

Ensure AddRateLimiter() is called at application startup.

For example, update Configure<RateLimiterOptions>(o => { }) to use AddRateLimiter():

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRateLimiter(o => o
    .AddFixedWindowLimiter(policyName: "fixed", options =>
    {
        // configuration
    }));

var app = builder.Build();
app.UseRateLimiter();
app.MapGet("/", () => Results.Ok($"Hello world")).RequireRateLimiting("fixed");
app.Run();

Affected APIs

UseRateLimiter()