C# 站点IP访问频率限制 针对单个站点的实现方法
程序员文章站
2022-03-10 14:31:31
站点ip访问频率限制 针对单个站点
using system;
using system.collections.generic;
using s...
站点ip访问频率限制 针对单个站点
using system; using system.collections.generic; using system.io; //using system.linq; using system.web; // <summary> // ip访问频率控制 // </summary> public static class ipcachemanager { /// <summary> /// ip缓存集合 /// </summary> private static list<ipcacheinfo> datalist = new list<ipcacheinfo>(); private static object lockobj = new object(); /// <summary> /// 一段时间内,最大请求次数,必须大于等于1 /// </summary> private static int maxtimes = 3; /// <summary> /// 一段时间长度(单位秒),必须大于等于1 /// </summary> private static int partsecond = 30; /// <summary> /// 请求被拒绝是否加入请求次数 /// </summary> private static bool isfailaddin = false; static ipcachemanager() { } /// <summary> /// 设置时间,默认maxtimes=3, partsecond=30 /// </summary> /// <param name="_maxtimes">最大请求次数</param> /// <param name="_partsecond">请求单位时间</param> public static void settime(int _maxtimes, int _partsecond) { maxtimes = _maxtimes; partsecond = _partsecond; } /// <summary> /// 检测一段时间内,ip的请求次数是否可以继续请求 /// 和使用 /// </summary> /// <param name="ip"></param> /// <returns></returns> 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<datetime> reqtime = new list<datetime>(); public list<datetime> reqtime { get { return this.reqtime; } set { this.reqtime = value; } } }
以上这篇c# 站点ip访问频率限制 针对单个站点的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。