/
nicteres
/
Lab1
Обзор
Документация
Войти
/
nicteres
/
Lab1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
123
API_Lab_1/src/Middleware/RateLimitHeadersMiddleware.cs
28 строк
1 KB
Matthew
Добавьте файлы проекта.
18 окт 2025, 18:03
18 окт 2025, 18:03
79e10ad
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Http; using System.Threading.Tasks; using System.Threading.RateLimiting; public class RateLimitHeadersMiddleware (RequestDelegate _next) { private const string RateLimitMetadataNameKey = "AspNetCore.RateLimiting.Metadata"; public async Task InvokeAsync(HttpContext context) { await _next(context); if (context.Items.TryGetValue(RateLimitMetadataNameKey, out var leaseObj) && leaseObj is RateLimitLease lease) { // Remaining permits if (lease.TryGetMetadata("RemainingPermits", out var remainingObj) && remainingObj is int remaining) { context.Response.Headers["X-Limit-Remaining"] = remaining.ToString(); } // Retry-After (if rejected) if (!lease.IsAcquired && lease.TryGetMetadata("RetryAfter", out var retryAfterObj) && retryAfterObj is TimeSpan retryAfter) { context.Response.Headers["Retry-After"] = ((int)retryAfter.TotalSeconds).ToString(); } } } }