控制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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM