控制ASP.NET Web API 調用頻率
阿新 • • 發佈:2019-01-18
har per roc .net gin () http attr dep 原文:控制ASP.NET Web API 調用頻率
很多的api,例如GitHub’s API 都有流量控制的做法。使用速率限制,以防止在很短的時間量客戶端向你的api發出太多的請求.例如,我們可以限制匿名API客戶端每小時最多60個請求,而我們可以讓更多的經過認證的客戶端發出更多的請求。那麽asp.net webapi如何實現這樣的功能呢?在項目WebApiContrib 上面已經有了一個實現:https://github.com/WebApiContrib/WebAPIContrib/blob/master/src/WebApiContrib/MessageHandlers/ThrottlingHandler.cs ,具有良好的可擴展性。
最簡單的方法是使用ThrottlingHandler註冊使用簡單的參數,例如控制每個用戶每小時60個請求:
config.MessageHandlers.Add(new ThrottlingHandler( new InMemoryThrottleStore(), id => 60, TimeSpan.FromHours(1)));
IThrottleStore接口 使用ID +當前的請求數量。InMemoryThrottleStore 只有一個內存中存儲,但你可以輕松地擴展實現為分布式緩存或數據庫。還可以輕松地自定義ThrottlingHandler的行為,例如我們針對一個ip地址可以更好的進行控制。
Throttling ASP.NET Web API calls
Introducing ASP.NET Web API Throttling handler
Throttling Suite for Web API
控制ASP.NET Web API 調用頻率