Skip to content

Rate Limiting Headers

Cristi Pufu edited this page Nov 13, 2022 · 2 revisions

Rate Limiting Headers

This sample shows how to set the default rate limiting headers:


HTTP Header Description
x-ratelimit-limit Request limit per timespan: 100/30m
x-ratelimit-remaining The number of requests left for the time window
x-ratelimit-reset The remaining window before the rate limit resets in seconds

public static Func<HttpContext, RateLimitLease, CancellationToken, ValueTask> OnRejected { get; } = (httpContext, lease, token) =>
{
    httpContext.Response.StatusCode = 429;

    if (lease.TryGetMetadata(RateLimitMetadataName.Limit, out var limit))
    {
        httpContext.Response.Headers[RateLimitHeaders.Limit] = limit;
    }

    if (lease.TryGetMetadata(RateLimitMetadataName.Remaining, out var remaining))
    {
        httpContext.Response.Headers[RateLimitHeaders.Remaining] = remaining.ToString();
    }

    if (lease.TryGetMetadata(RateLimitMetadataName.Reset, out var reset))
    {
        httpContext.Response.Headers[RateLimitHeaders.Reset] = reset.ToString();
    }

    if (lease.TryGetMetadata(RateLimitMetadataName.RetryAfter, out var retryAfter))
    {
        httpContext.Response.Headers[RateLimitHeaders.RetryAfter] = retryAfter.ToString();
    }

    return ValueTask.CompletedTask;
};

You can find the sample here RateLimitMetadata.cs

Clone this wiki locally