public async Task Invoke(HttpContext context) { var clientId = context.User.Claims.FirstOrDefault(c => c.Type == "client_id") != null ? context.User.Claims.FirstOrDefault(c => c.Type == "client_id").Value : "anonimo"; if (await _clientPolicyStore.GetAsync($"{_options.ClientPolicyPrefix}_{clientId}") == null) { var totalLimit = int.Parse(context.User.Claims.FirstOrDefault(c => c.Type == "client_AspNetRateLimit24h") != null ? context.User.Claims.FirstOrDefault(c => c.Type == "client_AspNetRateLimit24h").Value : "5"); if (clientId != "anonimo") { var rule = new ClientRateLimitPolicy() { ClientId = clientId, Rules = new List <RateLimitRule>() { new RateLimitRule { Endpoint = "*", Period = "24h", Limit = totalLimit } } }; await _clientPolicyStore.SetAsync($"{_options.ClientPolicyPrefix}_{rule.ClientId}", new ClientRateLimitPolicy { ClientId = rule.ClientId, Rules = rule.Rules }).ConfigureAwait(false); } } await next(context); }
public void Set(string id, ClientRateLimitPolicy policy) { _memoryCache.SetString(id, JsonConvert.SerializeObject(policy)); }
public void Set(string id, ClientRateLimitPolicy policy) { _memoryCache.Set(id, policy); }
public void Set(string id, ClientRateLimitPolicy policy) { _memoryCache.Set(id, policy, TimeSpan.MaxValue); }