
掌握API建模:基本概念和實踐
//下面的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();
"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。具體規則可以看官網。
為了達到效果,最好添加到第一個,代碼如下:
var app = builder.Build();
app.UseIpRateLimiting();
最后我們來看看效果,是否能真限流。
視頻中展示了限流的效果,1分鐘內限流10次,超過次數后會攔截訪問并給出提示。
上面展示了.NET Core Web API限流的步驟和效果,還可以設置多種限流的方式,比如全局限流等,大家可以查閱這個中間件的文檔,文檔如下:github.com/stefanprodan/AspNetCoreRateLimit/wiki/IpRateLimitMiddleware#defining-rate-limit-rules
本文講述了在.NET Core Web API中實現限流,以及限流的方式和概念。限流盡管有很多優點,但是對于某些項目,缺點也是顯而易見的,限流增加了開發和維護的復雜程度、某些情況下會降低用戶的體驗度、由于需要檢查訪問次數,可能會影響API站點的性能等。希望本文對你有所收獲,歡迎留言討論或者吐槽本文。同時歡迎關注“dotnet開發跳槽”公眾號的其它文章。
本文章轉載微信公眾號@CSharp編程大全