使用ASP.NET和global.asax进行速率限制
发布时间:2020-12-16 07:43:46 所属栏目:asp.Net 来源:网络整理
导读:使用ASP.NET的global.asax文件,每个IP每秒只允许一个请求的简单方法是什么? ASP.NET中没有其他内置的东西我没想到的吗? 如果可能的话,我只想忽略来自jQuery的Ajax函数的多个POST的请求.我正在尝试修复现有遗留应用中的普遍问题. 解决方法 这是使用Applicat
使用ASP.NET的global.asax文件,每个IP每秒只允许一个请求的简单方法是什么? ASP.NET中没有其他内置的东西我没想到的吗?
如果可能的话,我只想忽略来自jQuery的Ajax函数的多个POST的请求.我正在尝试修复现有遗留应用中的普遍问题. 解决方法
这是使用Application State执行此操作的简单方法,因为它适用于访问应用程序的所有用户和会话.
在一个名为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); } 问候,Jonas Stensved (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-web-api – ASP.NET核心Web API:为什么在Get请求中
- asp.net-mvc-3 – 自定义RegularExpressionAttribute缺少数
- asp.net-mvc – 从nopCommerce插件扩展Razor Partial View
- asp.net – 我有多个用户,我可以锁定网页,以便一次只有一个
- asp.net-mvc – StackExchange.Redis.IDatabase存在于两个d
- asp.net – Internet Explorer中的“通过电子邮件发送页面”
- asp.net – 将Windows身份验证与表单身份验证混合使用
- asp.net – 使用Javascript重新定位模态弹出窗口
- regex – ASP Classic:检查字符串是否只包含有效字符
- asp-classic – 从JScript代码调用VB编写的函数(经典ASP)
推荐文章
站长推荐
热点阅读