日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core如何限制请求频率

發布時間:2023/12/4 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core如何限制请求频率 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ASP.NET Core如何限制請求頻率,為了防止惡意請求,我們往往會對接口請求的頻率做限制,比如請求間隔,一段時間內請求的次數,針對部分IP做出不同的限制策略

如何去限制請求頻率不需要我們去實現,用上AspNetCoreRateLimit?輪子就好了????

Github地址:https://github.com/stefanprodan/AspNetCoreRateLimit

Nuget下載

Install-Package AspNetCoreRateLimit

第一步自然是修改Startup.cs

public void ConfigureServices(IServiceCollection services)
{
// 需要從appsettings.json中加載配置
services.AddOptions();
// 存儲IP計數器及配置規則services.AddMemoryCache();


services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();


// 按照文檔,這兩個是3.x版的breaking change,要加上
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
}
//以及
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 注意順序,放在 UseMvc 上面
app.UseIpRateLimiting();
app.UseMvc();
}

然后向appsettings.json加入限制配置

"IpRateLimiting": { "EnableEndpointRateLimiting": true, "StackBlockedRequests": false, "RealIpHeader": "X-Real-IP", "ClientIdHeader": "X-ClientId", "HttpStatusCode": 429, "GeneralRules": [ {
"Endpoint": "*:/Home/*?",
"Period": "1m",
"Limit": 3
} ] }

EnableEndpointRateLimiting設置為true,意思是IP限制會應用于單個配置的Endpoint上。如果是false的話,只會限制所有 * 的規則,而不能達到針對單個Endpoint配置的目的。

HttpStatusCode設置為429,意思是觸發限制之后給客戶端返回的HTTP狀態碼。

GeneralRules里我只配置了一條,針對/Home這URL的限制。其中,開頭的?*:?表示任何HTTP VERB,如GET/POST,而結尾的?/*?表示需要考慮/Home后面的參數,也就是我MVC Action參數里的route參數。它不會匹配

Home也不會匹配Home/*/*

如果您在appsettings.json配置文件中定義了靜態費率策略,則需要在應用程序啟動時為它們添加種子:??

public static async Task Main(string[] args){ IWebHost webHost = CreateWebHostBuilder(args).Build();
using (var scope = webHost.Services.CreateScope()) { // get the IpPolicyStore instance var ipPolicyStore = scope.ServiceProvider.GetRequiredService<IIpPolicyStore>();
// seed IP data from appsettings await ipPolicyStore.SeedAsync(); }
await webHost.RunAsync();}

當請求接口超過限制時!!!會出現以下錯誤

輪子還提供動態更新限制策略!!!

通過注入IOptions<IpRateLimitOptions>?和IIpPolicyStore可以實時更新限制策略

public class SpiderController : BlogControllerBase { private readonly IpRateLimitOptions _options; private readonly IIpPolicyStore _ipPolicyStore; public SpiderController(IOptions<IpRateLimitOptions> optionsAccessor , IIpPolicyStore ipPolicyStore) { _options = optionsAccessor.Value; _ipPolicyStore = ipPolicyStore; }
public async Task<IActionResult> Index(SpiderSelectCondition spiderSelect) { var pol = await _ipPolicyStore.GetAsync(_options.IpPolicyPrefix); pol.IpRules.Add(new IpRateLimitPolicy { Ip = "", Rules = new List<RateLimitRule>(new RateLimitRule[] { new RateLimitRule { Endpoint = "*:/Spider/Config", Limit = 2, PeriodTimespan=new TimeSpan(0,0,10), Period ="1d"} }) });
await _ipPolicyStore.SetAsync(_options.IpPolicyPrefix, pol); return View(); }

PeriodTimespan?為間隔時間

Period?一定時間內可執行Limit次

更多高級用法可以訪問官方文檔

總結

以上是生活随笔為你收集整理的ASP.NET Core如何限制请求频率的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。