C# 站点IP访问频率限制 针对单个站点的实现方法

下面小编就为大家带来一篇C# 站点IP访问频率限制 针对单个站点的实现方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

 站点IP访问频率限制 针对单个站点

 using System; using System.Collections.Generic; using System.IO; //using System.Linq; using System.Web; //  // IP访问频率控制 //  public static class IPCacheManager { ///  /// IP缓存集合 ///  private static List dataList = new List(); private static object lockObj = new object(); ///  /// 一段时间内,最大请求次数,必须大于等于1 ///  private static int maxTimes = 3; ///  /// 一段时间长度(单位秒),必须大于等于1 ///  private static int partSecond = 30; ///  /// 请求被拒绝是否加入请求次数 ///  private static bool isFailAddIn = false; static IPCacheManager() { } ///  /// 设置时间,默认maxTimes=3, partSecond=30 ///  /// 最大请求次数 /// 请求单位时间 public static void SetTime(int _maxTimes, int _partSecond) { maxTimes = _maxTimes; partSecond = _partSecond; } ///  /// 检测一段时间内,IP的请求次数是否可以继续请求 /// 和使用 ///  ///  ///  public static bool CheckIsAble(string ip) { lock (lockObj) { var item = dataList.Find(p => p.IP == ip); if (item == null) { item = new IPCacheInfo(); item.IP = ip; item.ReqTime.Add(DateTime.Now); dataList.Add(item); return true; } else { if (item.ReqTime.Count > maxTimes) { item.ReqTime.RemoveAt(0); } var nowTime = DateTime.Now; if (isFailAddIn) { #region 请求被拒绝也需要加入当次请求 item.ReqTime.Add(nowTime); if (item.ReqTime.Count >= maxTimes) { if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) { return false; } else { return true; } } else { return true; } #endregion } else { #region 请求被拒绝就不需要加入当次请求了 if (item.ReqTime.Count >= maxTimes) { if (item.ReqTime[0].AddSeconds(partSecond) > nowTime) { return false; } else { item.ReqTime.Add(nowTime); return true; } } else { item.ReqTime.Add(nowTime); return true; } #endregion } } } } } public class IPCacheInfo { public string IP { get; set; } private List reqTime = new List(); public List ReqTime { get { return this.reqTime; } set { this.reqTime = value; } } }

以上就是C# 站点IP访问频率限制 针对单个站点的实现方法的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 其他教程