Esempio n. 1
0
        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);
        }
Esempio n. 2
0
 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);
 }