-
Notifications
You must be signed in to change notification settings - Fork 26
Rate Limiting Headers
Cristi Pufu edited this page Nov 13, 2022
·
2 revisions
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