ASP.NET WebApi服务接口如何防止重复请求?

public class FrequencyControler {

///

/// 访问控制器名称,用于区分其它控制器,支持多个控制器

///

private string Name { get; set; }

///

/// 限定时长

///

private int Seconds { get; set; }

///

/// 限定次数

///

private int Times { get; set; }

public readonly int MAX_TIMES = 100;

#region 私有方法

private string SessionNameDatelist {

get { return String.Format("fc.{0}.datelist", Name); }

}

private string SessionNameDatepos {

get { return String.Format("fc.{0}.datepos", Name); }

}

///

/// 取得用于保存每次访问时间点的数组(做队列用)

///

///

private long[] GetDateList() {

if (HttpContext.Current.Session[SessionNameDatelist] == null) {

HttpContext.Current.Session[SessionNameDatelist] = new long[MAX_TIMES];

}

return (long[])HttpContext.Current.Session[SessionNameDatelist];

}

///

/// 获取时间记录位置,相当于当前队列位置

///

///

private int GetDatepos() {

if (HttpContext.Current.Session[SessionNameDatepos] == null) {

HttpContext.Current.Session[SessionNameDatepos] = 0;

}

return (int)HttpContext.Current.Session[SessionNameDatepos];

}

///

/// 设置时间记录位置,相当于当前队列位置

///

///

private void SetDatepos(int pos) {

HttpContext.Current.Session[SessionNameDatepos] = pos;

}

#endregion

///

/// 构造访问检测器,限定指定时间内最多请求次数

///

/// 名称

/// 限定时间范围(秒数)

/// 限定次数

public FrequencyControler(string name, int seconds, int times) {

Name = name;

Seconds = seconds;

Times = times;

if (times > MAX_TIMES) throw new Exception("限定次数设置值超出上限!");

}

///

/// 记录一次访问,在时间点数组的下一个位置(按最大长度循环覆盖存储)

///

pub

希望能帮到你

Google 在中国大陆上线官方镜像资源站,为开发者提供访问和支持

摘要: Google 中国近日在其运营的公众号「谷歌开发者」中发布公告:目前国内开发者可通过 google.cn 直接访问 web.dev 以及

36w字!腾讯高工甩出MySQL速成手册,基础架构调优三飞

想要精通MySQL你就必须知道如何设计一个高可用可扩展的企业级MySQL数据库集群以及高性能高可用MySQL调优方法。但大多数人对于MySQL的

PHP和Python哪个更适合Web开发?

在当今数字化的世界中,Web开发一直是无处不在的需求,而编程语言的选择则是这一过程中至关重要的决策之一。

桌面应用开发常用技术栈

开发电脑桌面应用可以使用多种技术栈,具体选择取决于开发者的需求和偏好。以下是一些常见的技术栈:前端开发技术栈:通常使用桌面应用开发框架,如Ele

JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

函数式编程:你可能知道,刚开始的时候 JavaScript 是“一种类似于 Scheme 的浏览器编程语言,只不过使用的是 Java 语法。”生