Lifecycle اپلیکیشن در ۹ ASP.NET Core؛ از Request تا Response

Lifecycle اپلیکیشن در ۹ ASP.NET Core؛ از Request تا Response

نوشته شده توسط: محمدامین نجفی
تاریخ انتشار: ۱۰ خرداد ۱۴۰۴
آخرین بروزرسانی: 10 خرداد 1404
زمان مطالعه: 10 دقیقه
۵
(۱)

یکی از مهم‌ترین مفاهیم در توسعه برنامه‌های وب با ASP.NET Core، درک درست و صحیح از چرخه‌ی حیات اپلیکیشن (Application Lifecycle) است. این چرخه نشان می‌دهد که چگونه یک درخواست (Request) از مرورگر یا کلاینت وارد برنامه شما می‌شود، چگونه از میان اجزای مختلف عبور می‌کند و در نهایت چگونه یک پاسخ (Response) به سمت کلاینت بازگردانده می‌شود. در این مقاله، مسیر کامل یک درخواست HTTP را از زمان دریافت توسط سرور Kestrel تا لحظه تولید پاسخ بررسی خواهیم کرد. همچنین نقش کلیدی  Middlewareها و Routing را در Application Lifecycle توضیح می‌دهیم.

Application Lifecycle in 9 ASP.NET Core

معرفی کلی Application Lifecycle در NET Core

در ASP.NET Core، تمام درخواست‌ها از طریق یک ساختار خطی به نام Request Processing Pipeline عبور می‌کنند که از مجموعه‌ای از Middlewareها تشکیل شده است. ابتدا نگاهی به مفهوم یا تعریف Kestrel داشته باشیم:

Kestrel یک وب‌سرور سبک و متن‌باز در ASP.NET Core است که به‌عنوان سرور پیش‌فرض برای دریافت و پردازش درخواست‌های HTTP استفاده می‌شود. این سرور با عملکرد بالا از پروتکل‌های HTTP/1.1، HTTP/2 و HTTP/3 پشتیبانی می‌کند و درخواست‌ها را به Pipeline داخلی ASP.NET Core منتقل می‌کند. Kestrel به دلیل مقیاس‌پذیری و انعطاف‌پذیری، برای اپلیکیشن‌های مدرن وب ایده‌آل است.



برای تسلط بیشتر بر معماری و تکنیک‌های خاص، آموزش پیشرفته ASP.NET Core، می‌تواند مسیر شما را برای تبدیل شدن به یک توسعه‌دهنده حرفه‌ای هموار کند.



در مسیر (به موارد زیر دقت کنید):

  • ابتدا سرور Kestrel درخواست را دریافت می‌کند.
  • سپس درخواست وارد زنجیره‌ای از Middleware ها می‌شود.
  • در نهایت، اگر یکی از Middleware ها به انتهای مسیر برسد، یک پاسخ تولید می‌شود و از همان مسیر به عقب باز می‌گردد.

ورود Request از Kestrel تاMiddleware Pipeline

در ASP.NET Core، به‌صورت پیش‌فرض از سرور Kestrel استفاده می‌شود:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

 Kestrel درخواست HTTP را دریافت کرده و آن را به Pipeline ارسال می‌کند که در متد Configure در کلاس Startup یا Program.cs تعریف شده است.

Middleware چیست و چگونه کار می‌کند؟

Middleware یک کامپوننت است که:

  • می‌تواند عملیات خاصی روی درخواست انجام دهد.
  • می‌تواند تصمیم بگیرد که درخواست را به Middleware بعدی ارسال کند یا نه.
  • می‌تواند Response را قبل از ارسال به کلاینت، تغییر دهد.

 

Middleware

public class SimpleMiddleware
{
    private readonly RequestDelegate _next;
    public SimpleMiddleware(RequestDelegate next)
    {
        _next = next;
    }
    public async Task InvokeAsync(HttpContext context)
    {
        // قبل از ارسال درخواست به Middleware بعدی
        Console.WriteLine("Request Handling Started");
        await _next(context);
        // بعد از دریافت پاسخ از Middleware بعدی
        Console.WriteLine("Response Handling Done");
    }
}

و ثبت آن در Startup یا Program.cs:

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<SimpleMiddleware>();
}

بررسی ترتیب Middlewareها

ترتیب تعریف Middleware بسیار مهم است. زیرا درخواست‌ها به ترتیب از بالا به پایین و پاسخ‌ها از پایین به بالا عبور می‌کنند.

برای مطالعه بیشتر از Middleware نویسی در ASP.NET Core به مقاله مربوطه مراجعه کنید.

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<LoggingMiddleware>();
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

مفهوم Endpoint Routing و MVC Middleware در Application Lifecycle

Middleware مربوط به Routing (UseRouting) مشخص می‌کند که آیا این درخواست باید به کنترلر خاصی هدایت شود یا نه. سپس در مرحلهUseEndpoints  مشخص می‌شود که کدام کنترلر یا اکشن باید فراخوانی شود.

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
    [HttpGet("{id}")]
    public IActionResult GetUser(int id)
    {
        return Ok(new { Id = id, Name = "Test User" });
    }
}

در اینجا:

  • Routing مسیر را تحلیل می‌کند.
  • کنترلر مشخص می‌شود.
  • اکشن اجرا می‌شود.

تولید Response و ارسال آن به کلاینت

پس از اجرای اکشن کنترلر، یک شیء از نوع  I ActionResultیا مشابه آن تولید می‌شود. ASP.NET Core این شی را تبدیل به یک Response HTTP کرده و از طریق Middlewareها به عقب بازمی‌گرداند تا به Kestrel برسد و در نهایت به کلاینت ارسال شود.

برای مثال، اگر از JSON استفاده شود:

return Ok(new { status = "success" });

 

در نهایت:

  • Response سریالایز می‌شود.
  • Headerها تنظیم می‌شوند.
  • بدنه پاسخ ارسال می‌شود.

سخن پایانی

مفهوم Application Lifecycle در ASP.NET Core مبتنی بر ساختار منعطف و قابل کنترل Middlewareهاست. این ساختار امکان افزودن ویژگی‌های امنیتی، لاگ‌گیری، مدیریت خطا، و مسیریابی را به شکل مدرن و قابل تست فراهم می‌کند. درک دقیق این فرایند به توسعه‌دهندگان کمک می‌کند اپلیکیشن‌هایی سریع‌تر، امن‌تر و قابل نگهداری‌تر بسازند. اگر بدانید دقیقاً از لحظه دریافت Request تا ارسال Response چه اتفاقاتی رخ می‌دهد، بهتر می‌توانید تصمیمات معماری بگیرید و کد بهتری بنویسید. نظرات خود را با ما در بخش نظرات این مقاله  نیک آموز در میان بگذارید.

سوالات متداول

۱- Application Lifecycle در ASP.NET Core چیست و چرا درک آن مهم است؟

Application Lifecycle نشان می‌دهد که چگونه یک درخواست از مرورگر وارد برنامه می‌شود، چگونه عبور می‌کند، و چگونه پاسخ برگردانده می‌شود. درک این چرخه مهم است زیرا به ساخت اپلیکیشن‌هایی سریع‌تر، امن‌تر، و قابل نگهداری‌تر کمک می‌کند.

۲- Kestrel در ASP.NET Core چیست و چه نقشی در چرخه حیات اپلیکیشن دارد؟

Kestrel یک وب‌سرور سبک و متن‌باز در ASP.NET Core است که به عنوان سرور پیش‌فرض برای دریافت و پردازش درخواست‌های HTTP استفاده می‌شود. نقش Kestrel این است که درخواست‌ها را دریافت کرده و آن‌ها را به Pipeline داخلی ASP.NET Core منتقل می‌کند.

۳- Middleware چیست و چگونه در Application Lifecycle عمل می‌کند؟

Middleware یک کامپوننت در ساختار خطی Pipeline است. می‌تواند بر روی درخواست عملیات انجام دهد، تصمیم بگیرد آن را به مرحله بعدی بفرستد و یا پاسخ را تغییر دهد. تمام درخواست‌ها از میان مجموعه‌ای از Middlewareها عبور می‌کنند و ترتیب آن‌ها مهم است. Application Lifecycle بر ساختار Middlewareها مبتنی است.

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۱

اولین نفر باش

وبینار Tech Team Lead در ASP .NET Core
کلاس حضوری آنلاین آموزش ASP .NET Core پیشرفته
title sign
معرفی نویسنده
محمدامین نجفی
مقالات
1 مقاله توسط این نویسنده
محصولات
1 دوره توسط این نویسنده
محمدامین نجفی

مدیر فنی فریمورک ASP.Net Prime
برنامه نویس ارشد شرکت جابار
برنامه نویس فریمورک AUA Framework
برنامه نویس ارشد گروه نرم افزاری هیلتن
برنامه نویس پروژه توزین پسماند و شهرپی شهرداری تهران
مدرس دانشگاه تهران شرق
مدرس دوره های پیشرفته برنامه نویسی سی شارپ و ASP.Net

title sign
دیدگاه کاربران