/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Middleware/RateLimiting/samples/RateLimitingSample/SampleRateLimiterPolicy.cs
37 строк
1 KB
dotnet-maestro[bot]
[main] Update dependencies from dotnet/runtime dotnet/efcore (#42946)
28 июл 2022, 05:47
Не верифицирован
28 июл 2022, 05:47
5c79e41
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Threading.RateLimiting; using Microsoft.AspNetCore.RateLimiting; namespace RateLimitingSample; public class SampleRateLimiterPolicy : IRateLimiterPolicy<string> { private Func<OnRejectedContext, CancellationToken, ValueTask>? _onRejected; public SampleRateLimiterPolicy(ILogger<SampleRateLimiterPolicy> logger) { _onRejected = (context, token) => { context.HttpContext.Response.StatusCode = 429; logger.LogInformation($"Request rejected by {nameof(SampleRateLimiterPolicy)}"); return ValueTask.CompletedTask; }; } public Func<OnRejectedContext, CancellationToken, ValueTask>? OnRejected { get => _onRejected; } // Use a sliding window limiter allowing 1 request every 10 seconds public RateLimitPartition<string> GetPartition(HttpContext httpContext) { return RateLimitPartition.GetSlidingWindowLimiter<string>(string.Empty, key => new SlidingWindowRateLimiterOptions { PermitLimit = 1, QueueProcessingOrder = QueueProcessingOrder.OldestFirst, QueueLimit = 1, Window = TimeSpan.FromSeconds(5), SegmentsPerWindow = 1 }); } }