Bud*_*Joe 5 asp.net ajax global-asax
使用ASP.NET的global.asax文件,每个IP每秒只允许一个请求的简单方法是什么?ASP.NET中没有其他内置的东西我没想到的吗?
如果可能的话,我只想忽略来自jQuery的Ajax函数的多个POST的请求.我正在尝试修复现有遗留应用中的普遍问题.
这是使用应用程序状态来实现此目的的简单方法,因为它适用于访问您的应用程序的所有用户和会话。
在名为 RequestManager.cs 的新文件中
public static class RequestManager
{
public static void Validate(HttpContext context)
{
if (context.Application["Blocklist"] == null)
context.Application.Add("Blocklist", new Dictionary<string, DateTime>());
Dictionary<string, DateTime> blocklist = context.Application["Blocklist"] as Dictionary<string, DateTime>;
if (blocklist.ContainsKey(context.Request.UserHostAddress))
{
DateTime lastRequest = blocklist[context.Request.UserHostAddress];
if (DateTime.Now.Subtract(lastRequest).TotalMilliseconds < 1000)
{
// End request
context.Response.Write(string.Format("You'll have to wait for {0} milliseconds until next request", 1000 - DateTime.Now.Subtract(lastRequest).TotalMilliseconds));
context.Response.End();
}
else
{
blocklist[context.Request.UserHostAddress] = DateTime.Now;
}
}
else
{
blocklist.Add(context.Request.UserHostAddress, DateTime.Now);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在您的 Global.asax 中:
protected void Application_BeginRequest(object sender, EventArgs e)
{
RequestManager.Validate(HttpContext.Current);
}
Run Code Online (Sandbox Code Playgroud)
问候, 乔纳斯·斯滕斯维德
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |