Возможно, вы сможете сделать это следующим образом:
// мой класс
private static XDic<DateTime, XDic<string, int>> daily_reg_attemps = new XDic<DateTime,XDic<string, int>>();
const int limit = 20;
public bool is_banned(string key,HttpRequestMessage request)
{
//handle attempt monitoring
var today = DateTime.Today.Date;
if (!daily_reg_attemps.ContainsKey(today))
daily_reg_attemps.Add(today, new XDic<string, int>());
var reg_attemps = daily_reg_attemps[today];
//handle attempts
var ip = GetClientIp(request);
if (!reg_attemps.ContainsKey(ip)) reg_attemps.Add(ip, 0);
if (!reg_attemps.ContainsKey(key)) reg_attemps.Add(key, 0);
//prevent localhost
if (!request.RequestUri.Host.Contains("localhost"))
{
reg_attemps[ip]++;
reg_attemps[key]++;
}
return (reg_attemps[ip] > limit || reg_attemps[key] > limit);
}
// мой собственный словарь
public class XDic<TKey, TValue> : Dictionary<TKey, TValue>
{
public virtual void Add(TKey key, TValue value, bool updateIfExist = true)
{
if (key == null)
{
throw new ArgumentException("Key parameter is Null.");
}
if (base.ContainsKey(key))
{
if (updateIfExist)
{
base[key] = value;
}
else {
throw new ArgumentException("Error")
}
}
else {
base.Add(key, value);
}
}