عنوان:

‫میان‌بر در خط‌لوله پردازش: آشنایی با ویژگی [ShortCircuit] در ASP.NET Core 11


نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۴/۲۹ ۰۹:۱۵
آدرس: www.dntips.ir
در معماری برنامه‌های وب متکی بر ASP.NET Core، خط‌لوله میان‌افزارها (Middleware Pipeline) قلب تپنده پردازش تمامی درخواست‌های HTTP است. هر درخواستی که به سمت سرور می‌آید، به‌صورت پیش‌فرض از زنجیره‌ای از میان‌افزارها نظیر احراز هویت (Authentication)، اعتبارسنجی اختیارات (Authorization)، مدیریت CORS، ثبت لاگ (Logging) و فشرده‌سازی عبور می‌کند تا در نهایت به اندپوئینت مقصد برسد.
اگرچه وجود این زنجیره برای بخش‌های اصلی برنامه (مانند صفحات کاربر یا APIهای حسّاس) حیاتی است، اما برای اندپوئینت‌های سبک و فنی—مانند بررسی سلامت سیستم (/health) یا ارائه فایل قوانین موتورهای جستجو (robots.txt)—طی کردن کامل این خط‌لوله به معنای پردازش اضافی و تخصیص بی‌مورد حافظه (Memory Allocation) است.
در ASP.NET Core 11 Preview 6، مایکروسافت با هدف افزایش کارایی و ساده‌سازی کد، ویژگی جدید [ShortCircuit] را معرفی کرده است (که توسط عضو فعال جامعه دات‌نت، @Porozhniakov توسعه یافته است). این ویژگی به توسعه‌دهندگان اجازه می‌دهد اندپوئینت‌های خاصی را به‌صورت صریح علامت‌گذاری کنند تا بلافاصله پس از مرحله مسیریابی (Routing)، باقی خط‌لوله میان‌افزارها دور زده شود و پاسخ صادر گردد.

بررسی فنی: اتصالات کوتاه (Short-Circuiting) چگونه کار می‌کنند؟
برای درک بهتر ارزش این ویژگی، مسیر حرکت یک درخواست را در دو حالت سنتی و اتصال‌کوتاه بررسی می‌کنیم:
درخواست عادی:
  • Request -> Routing -> Authentication -> Authorization -> CORS -> Custom Middlewares -> Endpoint Execution -> Response
درخواست با [ShortCircuit]:
  • Request -> Routing -> Endpoint Execution -> Response
  • (تمام میان‌افزارهای بین Routing و Endpoint کاملاً دور زده می‌شوند)

سیر تکاملی: از Fluent API به Attribute
در ASP.NET Core 8، متد توسعه‌ای .ShortCircuit() برای Minimal APIها معرفی شده بود. اما در .NET 11، این قابلیت به شکل یک Attribute صریح پیاده‌سازی شده است. این ارتقاء دو مزیت کلیدی دارد:
  • پشتیبانی کامل از MVC و Web API: اکنون می‌توانید [ShortCircuit] را مستقیماً روی کنترلرها یا اکشن‌متدها بنویسید.
  • معماری اعلامی (Declarative Architecture): خوانایی کد افزایش یافته و پیکربندی اندپوئینت‌ها در همان محل تعریف اکشن صورت می‌گیرد.

نمونه‌کدهای کاربردی
۱. استفاده در کنترلرهای سنتی (Controllers)
با افزودن صفت [ShortCircuit] به کنترلر یا یک اکشن مشخص، اجرای میان‌افزارهای بعدی لغو می‌شود:
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("robots.txt")]
[ShortCircuit] // دور زدن خط‌لوله میان‌افزارها بلافاصله پس از Routing
public class RobotsController : ControllerBase
{
    [HttpGet]
    public IActionResult Get() => Content("User-agent: *\nDisallow:", "text/plain");
}

۲. استفاده در Minimal APIs
در Minimal APIها نیز می‌توانید علاوه بر متد توسعه‌ای قبلی، از صفت جدید روی Inline Handlerها استفاده کنید:
// استفاده از Attribute در Minimal API
app.MapGet("/health", [ShortCircuit] () => "Healthy");

// استفاده از روش Fluent API (همچنان معتبر و قابل استفاده است)
app.MapGet("/ping", () => "Pong").ShortCircuit();

۳. تنظیم کد وضعیت HTTP (Status Code) سفارشی
اگر هدف شما صرفاً بازگرداندن یک Status Code خاص (مانند 404 یا 410) بدون اجرای میان‌افزارهای اضافی باشد، می‌توانید وضعیت مورد نظر را به عنوان آرگومان ورودی پاس دهید:
// به عنوان مثال: مسدودسازی یا پاسخ سریع به مسیرهای قدیمی
app.MapGet("/old-api", [ShortCircuit(404)] () => { });

مقایسه و راهنمای کاربری (Best Practices)
استفاده از [ShortCircuit] تاخیر (Latency) پردازش را کاهش داده و Throughput سرور را به ویژه در ترافیک‌های بالا افزایش می‌دهد. اما به دلیل دور زدن میان‌افزارها، رعایت نکات زیر ضروری است:
سناریوهای مناسب (Recommended)سناریوهای نامناسب (Avoid)
Health Checks: اندپوئینت‌های زیرساختی مانند /healthz یا /readyاندپوئینت‌های نیازمند امنیت: مسیرهایی که نیازمند احراز هویت (AuthN/AuthZ) هستند.
فایل‌های استاتیک سیستم: فایل‌های robots.txt یا favicon.icoدرخواست‌های Cross-Origin: اندپوئینت‌هایی که به پشتیبانی CORS نیاز دارند.
پینگ و متریک‌های عمومی: اندپوئینت‌های تست زنده بودن سرورپردازش‌های نیازمند لاگ سفارشی: مسیرهایی که باید توسط میان‌افزار لاگینگ ردیابی شوند.
نتیجه‌گیری
ویژگی [ShortCircuit] در ASP.NET Core 11 یک گام موثر در راستای بهینه‌سازی عملکرد (Performance) و پاکیزگی کد (Clean Code) است. این ویژگی به توسعه‌دهندگان اجازه می‌دهد تا اندپوئینت‌های عمومی و زیرساختی برنامه را از بار سنگین خط‌لوله میان‌افزارها رها سازند. اگر در پروژه‌های خود از اندپوئینت‌های پایش سلامت یا فایل‌های استاتیک استفاده می‌کنید، به محض مهاجرت به .NET 11، اعمال این ویژگی یکی از آسان‌ترین و مؤثرترین روش‌ها برای کاهش مصرف منابع سرور خواهد بود.