標籤:
參考地址:http://www.cnblogs.com/shanyou/p/3194802.html
安裝nuget包:WebApiContrib
很多的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地址可以更好的進行控制。
config.MessageHandlers.Add(new ThrottlingHandler( new InMemoryThrottleStore(), id => { if (id == "10.0.0.1") { return 5000; } return 60; }, TimeSpan.FromHours(1)));
ASP.NET Web API 控制請求頻率