publicclassFrequencyControler{
///<summary>
///訪問控制器名稱,用于區分其它控制器,支持多個控制器
///</summary>
privatestringName{get;set;}
///<summary>
///限定時長
///</summary>
privateintSeconds{get;set;}
///<summary>
///限定次數
///</summary>
privateintTimes{get;set;}
publicreadonlyintMAX_TIMES=100;
#region私有方法
privatestringSessionNameDatelist{
get{returnString.Format("fc.{0}.datelist",Name);}
}
privatestringSessionNameDatepos{
get{returnString.Format("fc.{0}.datepos",Name);}
}
///<summary>
///取得用于保存每次訪問時間點的數組(做隊列用)
///</summary>
///<returns></returns>
privatelong[]GetDateList(){
if(HttpContext.Current.Session[SessionNameDatelist]==null){
HttpContext.Current.Session[SessionNameDatelist]=newlong[MAX_TIMES];
}
return(long[])HttpContext.Current.Session[SessionNameDatelist];
}
///<summary>
///獲取時間記錄位置,相當于當前隊列位置
///</summary>
///<returns></returns>
privateintGetDatepos(){
if(HttpContext.Current.Session[SessionNameDatepos]==null){
HttpContext.Current.Session[SessionNameDatepos]=0;
}
return(int)HttpContext.Current.Session[SessionNameDatepos];
}
///<summary>
///設置時間記錄位置,相當于當前隊列位置
///</summary>
///<paramname="pos"></param>
privatevoidSetDatepos(intpos){
HttpContext.Current.Session[SessionNameDatepos]=pos;
}
#endregion
///<summary>
///構造訪問檢測器,限定指定時間內最多請求次數
///</summary>
///<paramname="name">名稱</param>
///<paramname="seconds">限定時間范圍(秒數)</param>
///<paramname="times">限定次數</param>
publicFrequencyControler(stringname,intseconds,inttimes){
Name=name;
Seconds=seconds;
Times=times;
if(times>MAX_TIMES)thrownewException("限定次數設置值超出上限!");
}
///<summary>
///記錄一次訪問,在時間點數組的下一個位置(按最大長度循環覆蓋存儲)
///</summary>
pub
希望能幫到你