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

希望能帮到你

一份值得收藏的 MySQL 高性能优化规范建议

数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割。所有数据库对象名称禁止使用 MySQL 保留关键字。

公司如何才能做好网站建设?

关于公司如何才能做好网站建设对于想要通过网络营销推广来提升品牌知名度,以及提升公司销售业绩的企业来讲就显得尤其重要了。那么企业如何才能做好网站建设呢?下面品牌益众帮为需要网站建设的企业解答一些网站建设:-做好,网站,网站建设,建设:公司如何才能做好网站建设?

做有活力的网站?超实用网页动画指南值得收藏 | 分享

现如今,动画对于网页设计师已经不再新奇,它正在成为最基础的交互设计效果。动画就是变化,是一种运动。下面就来跟范儿姐一起来了解一下网页动画吧~01网页动画简史正所谓,了解一件事物,就

前端网页加载渲染链路优化

opensignal官方提供了2018年2月份统计的全世界4G网络覆盖率和通信速率的统计分布图如下,在目前移动互联网的浪潮下,我们要利用好用户终端设备的每个字节的流量。

架构设计:标准Web系统的架构分层

例如:一些简单的CRM系统可能在产品初期并不需要K-V作为缓存;一些系统访问量不大,并且可能只有一台业务服务器存在,所以不需要运用负载均衡层。