//下面的IpRateLimiting為限流策略的配置文件結點名稱,可以配置多個策略
builder.Services.Configure<IpRateLimitOptions>(builder.Configuration.GetSection("IpRateLimiting"));
//添加對內存中的 IP 策略存儲的支持
builder.Services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
builder.Services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
builder.Services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
builder.Services.AddInMemoryRateLimiting();

3) 在 appsettings.json文件中添加規則,規則如下:

 "IpRateLimiting": {
"EnableEndpointRateLimiting": true,
"StackBlockedRequests": false,
"RealIpHeader": "X-Real-IP",
"ClientIdHeader": "X-ClientId",
"HttpStatusCode": 429,
"IpWhitelist": [],
"EndpointWhitelist": [],
"GeneralRules": [
{
"Endpoint": "GET:/WeatherForecast",
"Period": "1m",
"Limit": 10
}
]
}
//歡迎關注公眾號DOTNET開發跳槽,領取面試題
//加微信號xbhpnet入群交流技術和跳槽經驗.

上面的節點名稱是配置中間件時節點名稱,規則GeneralRules的節點下,意思是限制/WeatherForecast的鏈接,每分鐘最大請求次數為10次。如果達到限制次數,將對客戶端返回429。具體規則可以看官網。

4)添加中間件

為了達到效果,最好添加到第一個,代碼如下:

var app = builder.Build();
app.UseIpRateLimiting();

5)效果如下

最后我們來看看效果,是否能真限流。

視頻中展示了限流的效果,1分鐘內限流10次,超過次數后會攔截訪問并給出提示。

上面展示了.NET Core Web API限流的步驟和效果,還可以設置多種限流的方式,比如全局限流等,大家可以查閱這個中間件的文檔,文檔如下:github.com/stefanprodan/AspNetCoreRateLimit/wiki/IpRateLimitMiddleware#defining-rate-limit-rules

結語

本文講述了在.NET Core Web API中實現限流,以及限流的方式和概念。限流盡管有很多優點,但是對于某些項目,缺點也是顯而易見的,限流增加了開發和維護的復雜程度、某些情況下會降低用戶的體驗度、由于需要檢查訪問次數,可能會影響API站點的性能等。希望本文對你有所收獲,歡迎留言討論或者吐槽本文。同時歡迎關注“dotnet開發跳槽”公眾號的其它文章。

本文章轉載微信公眾號@CSharp編程大全

上一篇:

通過Flask框架創建靈活的、可擴展的Web Restful API服務

下一篇:

如何通過 API 將大模型集成到自己的應用程序中
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費