
正文
WebApi 接口恶意请求限制
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
为了防止爬虫以及恶意请求,我们适当的为API增加一个请求限制 WebApiThrottle限流框架
WebApiThrottle支持自定义配置各种限流策略。可以根据不同场景配置多个不同的限制,比如授权某个IP每秒、每分钟、每小时、每天、每周的最大调用次数。 这些限制策略可以配置在所有请求上,也可以单独给每个API接口去配置。
--十色鹿
本文不再过多讲解理论,你们可以看看这两位大佬文章,都解释很详细了(链接在底部)
API 还是使用上次的 如果没新建,请看 -> https://www.cnblogs.com/whatarey/p/11438243.html
第一步 NuGet WebApiThrottle

第二步 WebApiConfig.cs 配置 #region web api 接口请求限制~~1
///// web api 接口请求限制~~
//config.Filters.Add(new ThrottlingHandler()
//{
// Policy = new ThrottlePolicy()
// { // //ip配置区域
// IpThrottling = true,
// ClientThrottling = true, // //端点限制策略配置会从EnableThrottling特性中获取。
// EndpointThrottling = true // }
//});
#endregion #region Web Api 接口请求限制 2 //WebApiConfig 增加
config.MessageHandlers.Add(new ThrottlingHandler()
{
Policy = new ThrottlePolicy(
perSecond: //可选参数 每秒限制次数
, perMinute: //可选参数 每分钟限制次数
, perHour: //可选参数 每小时限制次数
, perDay: //可选参数 每天限制次数
, perWeek: //可选参数 每周限制次数
)
{
IpThrottling = true, //该值指示是否启用IP限制
ClientThrottling = true //该值指示是否启用客户端限制
},
Repository = new CacheRepository(), //获取或设置限制度量存储。
//QuotaExceededMessage = JsonConvert.SerializeObject(json.msg),
QuotaExceededContent = (l, obj) => //违反限流事件
{ //API calls quota exceeded! maximum admitted {0} per {1} var json = new {message = $"系统检测您当前操作非人类,{l}/{obj}" };
return (json);
}
});
#endregion
第三步:测试
#region web api 接口请求限制~~1
///// web api 接口请求限制~~
//config.Filters.Add(new ThrottlingHandler()
//{
// Policy = new ThrottlePolicy()
// { // //ip配置区域
// IpThrottling = true,
// ClientThrottling = true, // //端点限制策略配置会从EnableThrottling特性中获取。
// EndpointThrottling = true // }
//});
#endregion #region Web Api 接口请求限制 2 //WebApiConfig 增加
config.MessageHandlers.Add(new ThrottlingHandler()
{
Policy = new ThrottlePolicy(
perSecond: //可选参数 每秒限制次数
, perMinute: //可选参数 每分钟限制次数
, perHour: //可选参数 每小时限制次数
, perDay: //可选参数 每天限制次数
, perWeek: //可选参数 每周限制次数
)
{
IpThrottling = true, //该值指示是否启用IP限制
ClientThrottling = true //该值指示是否启用客户端限制
},
Repository = new CacheRepository(), //获取或设置限制度量存储。
//QuotaExceededMessage = JsonConvert.SerializeObject(json.msg),
QuotaExceededContent = (l, obj) => //违反限流事件
{ //API calls quota exceeded! maximum admitted {0} per {1} var json = new {message = $"系统检测您当前操作非人类,{l}/{obj}" };
return (json);
}
});
#endregion



https://www.cnblogs.com/fger/p/11119566.html --有关WebApiThrottle 可查看此篇文章
https://www.cnblogs.com/SzeCheng/p/5407316.html --有关WebApiThrottle 可查看此篇文章
End




