diff --git a/src/Middleware/RateLimiting/src/PublicAPI.Unshipped.txt b/src/Middleware/RateLimiting/src/PublicAPI.Unshipped.txt index b62cec89b1cc..01e163b51c90 100644 --- a/src/Middleware/RateLimiting/src/PublicAPI.Unshipped.txt +++ b/src/Middleware/RateLimiting/src/PublicAPI.Unshipped.txt @@ -8,4 +8,4 @@ Microsoft.AspNetCore.RateLimiting.RateLimiterOptions.OnRejected.set -> void Microsoft.AspNetCore.RateLimiting.RateLimiterOptions.RateLimiterOptions() -> void Microsoft.AspNetCore.RateLimiting.RateLimitingApplicationBuilderExtensions static Microsoft.AspNetCore.RateLimiting.RateLimitingApplicationBuilderExtensions.UseRateLimiter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! -static Microsoft.AspNetCore.RateLimiting.RateLimitingApplicationBuilderExtensions.UseRateLimiter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, Microsoft.AspNetCore.RateLimiting.RateLimiterOptions! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! +static Microsoft.AspNetCore.RateLimiting.RateLimitingApplicationBuilderExtensions.UseRateLimiter(this Microsoft.AspNetCore.Builder.IApplicationBuilder! app, System.Action! options) -> Microsoft.AspNetCore.Builder.IApplicationBuilder! diff --git a/src/Middleware/RateLimiting/src/RateLimitingApplicationBuilderExtensions.cs b/src/Middleware/RateLimiting/src/RateLimitingApplicationBuilderExtensions.cs index 7cda2ab98c53..305d38634f7c 100644 --- a/src/Middleware/RateLimiting/src/RateLimitingApplicationBuilderExtensions.cs +++ b/src/Middleware/RateLimiting/src/RateLimitingApplicationBuilderExtensions.cs @@ -29,11 +29,14 @@ public static IApplicationBuilder UseRateLimiter(this IApplicationBuilder app) /// /// /// - public static IApplicationBuilder UseRateLimiter(this IApplicationBuilder app, RateLimiterOptions options) + public static IApplicationBuilder UseRateLimiter(this IApplicationBuilder app, Action options) { ArgumentNullException.ThrowIfNull(app, nameof(app)); ArgumentNullException.ThrowIfNull(options, nameof(options)); - return app.UseMiddleware(Options.Create(options)); + var rateLimiterOptions = new RateLimiterOptions(); + options.Invoke(rateLimiterOptions); + + return app.UseMiddleware(Options.Create(rateLimiterOptions)); } } diff --git a/src/Middleware/RateLimiting/test/RateLimitingApplicationBuilderExtensionsTests.cs b/src/Middleware/RateLimiting/test/RateLimitingApplicationBuilderExtensionsTests.cs index 37d6d5bc4c37..b32f06d606a5 100644 --- a/src/Middleware/RateLimiting/test/RateLimitingApplicationBuilderExtensionsTests.cs +++ b/src/Middleware/RateLimiting/test/RateLimitingApplicationBuilderExtensionsTests.cs @@ -28,9 +28,11 @@ public void UseRateLimiter_ThrowsOnNullOptions() public void UseRateLimiter_RespectsOptions() { // These are the options that should get used - var options = new RateLimiterOptions(); - options.DefaultRejectionStatusCode = 429; - options.Limiter = new TestPartitionedRateLimiter(new TestRateLimiter(false)); + var configureOptions = new Action(opt => + { + opt.DefaultRejectionStatusCode = 429; + opt.Limiter = new TestPartitionedRateLimiter(new TestRateLimiter(false)); + }); // These should not get used var services = new ServiceCollection(); @@ -44,7 +46,7 @@ public void UseRateLimiter_RespectsOptions() var appBuilder = new ApplicationBuilder(serviceProvider); // Act - appBuilder.UseRateLimiter(options); + appBuilder.UseRateLimiter(configureOptions); var app = appBuilder.Build(); var context = new DefaultHttpContext(); app.Invoke(context);