gpt4 book ai didi

asp.net - 使用 ASP.NET 和 global.asax 进行速率限制

转载 作者:行者123 更新时间:2023-12-03 14:46:08 25 4
gpt4 key购买 nike

使用 ASP.NET 的 global.asax 文件,每秒每个 IP 只允许一个请求的简单方法是什么? ASP.NET 中是否还有其他我没有想到的内置功能?

如果可能,我只想忽略来自 jQuery 的 Ajax 函数的多个 POST 请求。我正在尝试解决现有遗留应用程序中普遍存在的问题。

最佳答案

这是使用应用程序状态的一种简单方法,因为它适用于访问您的应用程序的所有用户和 session 。

在名为 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);
}

}
}

在您的 Global.asax 中:
 protected void Application_BeginRequest(object sender, EventArgs e)
{
RequestManager.Validate(HttpContext.Current);
}

问候,
乔纳斯·斯滕维德

关于asp.net - 使用 ASP.NET 和 global.asax 进行速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com