.Net 用户重复发送请求的问题
脑洞大开,如果一个退款请求,用户由于网络疯狂点击按钮咋办?或者流氓疯狂轰炸你的服务器咋整?
首先想到的是定义变量来解决这个问题,但是兄弟们,网站上面这么多接口咋整?一个一个的定义变量吗??显然不是最佳方案,也不够优雅
解决方法
我们的解决思路是 使用MemoryCache 缓存对象将用户的请求地址和sessionid当做缓存对象的key并设置过期时间,然后通过在这个缓存对象里面找key值来判断是否是重复点击
首先封装了个缓存的帮助类
public class CacheHelper
{
public static void Set(string key, object obj, int seconds = 10)
{
var cache = MemoryCache.Default;
var policy = new CacheItemPolicy
{
AbsoluteExpiration = DateTime.Now.AddSeconds(seconds)
};
cache.Set(key, obj, policy);
}
public static T Get<T>(string key) where T : class
{
var cache = MemoryCache.Default;
try
{
return (T)cache[key];
}
catch (Exception)
{
return null;
}
}
}
实现代码
public void Controller()
{
string url = "第n次的请求地址"+"sessionid";
string guid = CacheHelper.Get<string>(url);
if (guid != null)
{
Console.WriteLine("重复访问");
}
else
{
CacheHelper.Set(url, new Guid().ToString() + DateTime.Now.Ticks);
}
}
是不是很简单?另外也可以使用redis来代替这个缓存对象,思路都是一样的哈