Ⅰ. はじめに
タイトルの通り「ASP.NET 7 以降でAPI呼出回数制限を実装する方法」です。
Ⅱ. 手順
1. サンプルプログラムを書く
Program.cs
using Microsoft.AspNetCore.RateLimiting; using System.Threading.RateLimiting; var builder = WebApplication.CreateBuilder(args); builder.Services.AddRateLimiter(x => { x.AddFixedWindowLimiter("MyPerfectPolicyName", y => { y.Window = TimeSpan.FromSeconds(10); // 例として10秒を指定する y.PermitLimit = 1; // Windowで指定した時間内で許容するリクエスト数 y.QueueLimit = 2; // 許容リクエスト数を超えた場合の最大キュー数 y.QueueProcessingOrder = QueueProcessingOrder.OldestFirst; // キューの処理順序。古いリクエストを優先する。 }); }); var app = builder.Build(); app.MapControllers(); app.UseRateLimiter(); // 追加 app.Run();
ApiController.cs
[EnableRateLimiting("MyPerfectPolicyName")] [ApiController] [Route("[controller]")] public class ApiController : ControllerBase { [HttpGet] public string Get() => "123"; }
実行結果
連続で4回アクセスした場合
HTTPリクエスト回数 | 動作 |
1回目 | 成功 |
2回目 | 10秒以内で2回目のリクエストが発生 待機キューに追加される |
3回目 | 10秒以内で3回目のリクエストが発生 待機キューに追加される |
4回目 | 10秒以内で4回目のリクエストが発生 待機キューの最大数2を超えているのでリクエストは破棄される |
- 1回目から10秒後、2回目のリクエストが処理される
さらに10秒後、3回目のリクエストが処理される