การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา
ใช้ขีดจำกัดอัตราต่อจุดเชื่อมต่อและนโยบาย
การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
AddRateLimiter
เริ่มการกำหนดค่าด้วย AddRateLimiter ในคอนเทนเนอร์บริการ คุณกำหนด นโยบายที่มีชื่อได้อย่างน้อยหนึ่งรายการ รวมถึงรหัสสถานะเมื่อปฏิเสธแบบโกลบอลที่เป็นตัวเลือกเสริม
builder.Services.AddRateLimiter(options =>
{
options.RejectionStatusCode =
StatusCodes.Status429TooManyRequests;
});นโยบายช่วงเวลาคงที่
AddFixedWindowLimiter ลงทะเบียนนโยบายที่มีชื่อ กำหนดขีดจำกัดการอนุญาต ความยาวของช่วงเวลา และลักษณะการทำงานของคิว
options.AddFixedWindowLimiter("fixed", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
limiter.QueueLimit = 0;
});นโยบายช่วงเวลาเลื่อน
AddSlidingWindowLimiter เพิ่ม SegmentsPerWindow เพื่อควบคุมความละเอียดในการทำให้การจำกัดราบรื่น
options.AddSlidingWindowLimiter("sliding", limiter =>
{
limiter.PermitLimit = 100;
limiter.Window = TimeSpan.FromMinutes(1);
limiter.SegmentsPerWindow = 6;
limiter.QueueLimit = 0;
});นโยบายบัคเก็ตโทเค็น
AddTokenBucketLimiter กำหนดขนาดบัคเก็ตและอัตราการเติมโทเค็น
options.AddTokenBucketLimiter("token", limiter =>
{
limiter.TokenLimit = 100;
limiter.TokensPerPeriod = 20;
limiter.ReplenishmentPeriod = TimeSpan.FromSeconds(10);
limiter.QueueLimit = 0;
});นโยบายการทำงานพร้อมกัน
AddConcurrencyLimiter จำกัดจำนวนคำขอที่เกิดขึ้นพร้อมกัน
options.AddConcurrencyLimiter("concurrent", limiter =>
{
limiter.PermitLimit = 5;
limiter.QueueLimit = 10;
limiter.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
});การเพิ่มมิดเดิลแวร์
เปิดใช้งานการจำกัดอัตราในไปป์ไลน์ด้วย UseRateLimiter โดยวางไว้ช่วงต้นของไปป์ไลน์หลังการกำหนดเส้นทาง
var app = builder.Build();
app.UseRateLimiter();
app.MapControllers();RequireRateLimiting
ใช้นโยบายที่มีชื่อกับจุดปลายทางด้วย RequireRateLimiting (Minimal API) หรือแอตทริบิวต์ [EnableRateLimiting] (ตัวควบคุม)
app.MapGet("/search", () => Results.Ok())
.RequireRateLimiting("token");
// Controller equivalent:
// [EnableRateLimiting("token")]การปิดใช้งานในจุดปลายทางเฉพาะ
ยกเว้นจุดปลายทางจากตัวจำกัดของกลุ่มหรือโกลบอลด้วย DisableRateLimiting หรือ [DisableRateLimiting]
app.MapGet("/health", () => Results.Ok())
.DisableRateLimiting();ตัวจำกัดโกลบอลพร้อมการแบ่งส่วน
GlobalLimiter ใช้กับทุกคำขอ ใช้ PartitionedRateLimiter.Create เพื่อให้ผู้ใช้หรือ IP แต่ละรายการมีตัวนับของตนเอง
options.GlobalLimiter = PartitionedRateLimiter.Create<HttpContext, string>(
context =>
{
var key = context.User.Identity?.Name
?? context.Connection.RemoteIpAddress?.ToString()
?? "anon";
return RateLimitPartition.GetFixedWindowLimiter(key, _ =>
new FixedWindowRateLimiterOptions
{
PermitLimit = 100,
Window = TimeSpan.FromMinutes(1)
});
});การปรับแต่งการปฏิเสธ
OnRejected ช่วยให้คุณเพิ่มส่วนหัว Retry-After หรือเนื้อหาที่อ่านเข้าใจง่ายเมื่อคำขอถูกชะลอ
options.OnRejected = async (context, token) =>
{
if (context.Lease.TryGetMetadata(
MetadataName.RetryAfter, out var retry))
context.HttpContext.Response.Headers.RetryAfter =
((int)retry.TotalSeconds).ToString();
await context.HttpContext.Response
.WriteAsync("Rate limit exceeded.", token);
};การใช้กับกลุ่มเส้นทาง
ผูกนโยบายกับกลุ่มเส้นทางทั้งหมด เพื่อให้ทุกจุดปลายทางภายในกลุ่มใช้ข้อจำกัดร่วมกัน
var api = app.MapGroup("/api")
.RequireRateLimiting("fixed");
api.MapGet("/products", () => Results.Ok());
api.MapGet("/orders", () => Results.Ok());ตรวจสอบความเข้าใจ
ยืนยันการตั้งค่ามิดเดิลแวร์
สรุปทบทวน
คุณได้กำหนดค่าการจำกัดอัตราแล้ว:
AddRateLimiterกำหนดนโยบายช่วงเวลาคงที่ ช่วงเวลาเลื่อน บัคเก็ตโทเค็น และการทำงานพร้อมกันUseRateLimiterเปิดใช้งานมิดเดิลแวร์ ส่วนRequireRateLimitingใช้นโยบายGlobalLimiterร่วมกับPartitionedRateLimiterทำให้มีตัวนับแยกตามไคลเอ็นต์OnRejectedใช้ปรับแต่งการตอบกลับ 429
ถัดไป: การแคชผลลัพธ์
คำถามที่พบบ่อย
บทเรียน “การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา”
ใช้ขีดจำกัดอัตราต่อจุดเชื่อมต่อและนโยบาย คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- อัลกอริทึมจำกัดอัตรา
- การกำหนดค่ามิดเดิลแวร์จำกัดอัตรา
- พื้นฐานการแคชผลลัพธ์
- นโยบายแคชและการทำให้แคชใช้ไม่ได้