Request Life Cycle trong ASP.NET Core

Vòng đời ASP.net core là gì? Đây là một kiến thức cực kỳ quan trọng để giúp bạn học tốt và làm tốt các công việc liên quan đến lập trình web. Cùng Comdy.vn tìm hiểu tất tần tật về request Life Cycle trong ASP.NET Core trong bài viết này nhé.

Life cycle .net core (life cycle of .net core web api)

Life cycle .NET Core
Life cycle .NET Core là quá trình mà một ứng dụng ASP.NET Core đi qua từ khi nhận một yêu cầu (asp.net request) từ client đến khi trả về phản hồi (response)

Life cycle .NET Core thường được đề cập đến ASP.NET Core Request life cycle Processing Pipeline hay ASP.NET Core Application Life Cycle. Đây là quá trình mà một ứng dụng ASP.NET Core đi qua từ khi nhận một yêu cầu (asp.net request) từ client đến khi trả về phản hồi (response). Quá trình này giúp xác định cách mà ứng dụng xử lý yêu cầu, thực hiện các tác vụ và tạo ra phản hồi.

Dưới đây là một số bước chính trong asp.net core web api request life cycle:

  • Startup: Quá trình này xảy ra khi ứng dụng khởi động. Trong lớp Startup, bạn có thể thiết lập và cấu hình các dịch vụ (services) và middleware cần thiết cho ứng dụng.
  • Middleware Pipeline Configuration: Cấu hình các middleware trong Configure method của lớp Startup. Middleware là các thành phần xử lý yêu cầu và phản hồi như logging, routing, authentication, compression, etc.
  • Request Processing: Khi một yêu cầu đến, nó được chuyển qua một loạt các middleware theo thứ tự được xác định trong pipeline. Mỗi middleware có thể xử lý yêu cầu, thêm thông tin vào yêu cầu, hoặc thậm chí gọi middleware tiếp theo trong pipeline.
  • Controller Execution: Nếu yêu cầu đòi hỏi một hành động từ một controller (trong MVC pattern), quá trình này sẽ được thực hiện. Controller xử lý yêu cầu và trả về một đối tượng ActionResult.
  • View Rendering (nếu có): Nếu ActionResult là một ViewResult, quá trình này sẽ render HTML và trả về cho client.
  • Response: Phản hồi được gửi về client, kết thúc chu kỳ xử lý yêu cầu.
  • Application Shutdown (nếu có): Nếu ứng dụng được kích hoạt để đóng, quá trình tắt ứng dụng sẽ diễn ra.

Một số khái niệm liên quan đến .net core web api life cycle

Khái niệm liên quan đến .NET core web api life cycle
Tìm hiểu một số khái niệm liên quan đến .net core web api life cycle

Asp net core là gì?

ASP.NET Core là một framework phát triển ứng dụng web mã nguồn mở của Microsoft. Nó là phiên bản tiếp theo của ASP.NET, được xây dựng để đáp ứng các yêu cầu hiện đại của phát triển web và đa nền tảng.

Request Pipeline là gì?

Request Pipeline (đường ống request) là cơ chế được bắt đầu từ khi request được xử lý tới khi trả về một response. Request đến từ trình duyệt đi qua request pipeline và quay trở lại khi xử lý xong để trả về response cho client. Các thành phần đơn lẻ tạo nên request pipeline này được gọi là middleware.

Middleware là gì?

Middleware là gì
Middleware là thành phần được kết hợp để tạo thành một request pipeline để xử lý bất kỳ yêu cầu nào đến.

Middleware là thành phần được kết hợp để tạo thành một request pipeline để xử lý bất kỳ yêu cầu nào đến.

Bất cứ khi nào một yêu cầu mới đến, nó sẽ được chuyển đến middleware đầu tiên. Sau đó, middleware quyết định tạo response sau khi xử lý request gửi đến hay chuyển nó cho middleware tiếp theo. Sau khi request được xử lý, response được gửi lại với các middleware  này.

Bây giờ, chúng ta sẽ tạo một middleware đơn giản trả về text bằng cách tạo lớp ContentComponent.cs như sau.

using System.Text;  
using System.Threading.Tasks;  
using Microsoft.AspNetCore.Http;  

namespace WebApplication  
{  
   public class ContentComponent   
   {  
      private RequestDelegate nextComponent;  
      
      public ContentComponent(RequestDelegate nextMiddleware) => nextComponent = nextMiddleware;  
      
      public async Task Invoke(HttpContext httpContext)  
      {  
         if (httpContext.Request.Path.ToString().ToLower() == "/edit")  
         {  
            await httpContext.Response.WriteAsync("This is edit URL component", Encoding.UTF8);  
         }  
         else
         {  
            await nextComponent.Invoke(httpContext);  
         }  
      }  
   }  
}

Middleware ContentComponent này định nghĩa một phương thức khởi tạo và bên trong phương thức khởi tạo đó nhận đối tượng RequestDelegate. Đối tượng RequestDelegate này đại diện cho thành phần phần mềm trung gian tiếp theo.

Middleware ContentComponent cũng định nghĩa một phương thức Invoke. Khi ứng dụng ASP.NET lifecycle Core nhận được một request đến, phương thức Invoke sẽ được gọi.

Đối số HttpContext của phương thức Invoke cung cấp thông tin về HTTP request và response được tạo sẽ được gửi lại cho client.

Phương thức Invoke của  lớp ContentComponent kiểm tra xem request đến có được gửi đến URL /edit hay không. Nếu request được gửi đến URL /edit thì sẽ trả về response là This is edit URL component.

Routing

Routing là một middleware được triển khai trong MVC framework. Routing middleware  quyết định cách một request được gửi đến có thể được ánh xạ tới Controller và Action Method nào nhờ sự trợ giúp của các cấu hình tuyến.

Khởi tạo Controller

Ở giai đoạn này của request lifecycle trong ASP.NET MVC Core, quá trình khởi tạo và thực thi Controller diễn ra. Controller có trách nhiệm xử lý các request được gửi đến. Controller lựa chọn Action Method thích hợp trên cơ sở các mẫu định tuyến được cung cấp.

Thực thi Action Method

Thực thi Action Method
Sau khi Controller được khởi tạo, Action Method được thực thi và trả về Result (kết quả).

Sau khi Controller được khởi tạo, Action Method được thực thi và trả về Result (kết quả).

Thực thi Result

Trong giai đoạn này của request lifecycle trong ASP.NET MVC Core, Result tức là response được tạo cho request HTTP ban đầu, sẽ được thực thi. Nếu Action Method trả về có dạng ViewResult, MVC view engine sẽ render và trả về phản hồi HTML. Nếu kết quả không phải là ViewResult thì Action Method sẽ tạo ra phản hồi của riêng nó.

Bây giờ, chúng ta sẽ thảo luận ngắn gọn về từng giai đoạn:

Routing

Routing là một middleware được triển khai trong request MVC framework. Trong ASP.NET Core life cycle, hệ thống định tuyến được sử dụng để xử lý các URL.

Routing middleware quyết định cách một yêu cầu đến có thể được ánh xạ tới Controller và các Action Method, với sự trợ giúp của cấu hình định tuyến.

Routing kết nối Middleware và mvc life cycle of asp.net core framework bằng cách ánh xạ request đến với các Action Method của Controller.

Trong một ứng dụng cụ thể, MVC đăng ký một hoặc nhiều tuyến đường bằng cách sử dụng phương thức MapRoute (.NET Core version 2.x trở về trước) hoặc MapControllerRoute (.NET Core lifecycle version 3.x hoặc mới hơn).

Routing Pipeline

Trong ASP.NET Core, routing ánh xạ một request đến lớp RouteHandler, sau đó được chuyển dưới dạng tập hợp các tuyến đến Routing Middleware.

Routing Middleware thực thi MVC RouteHandler cho mỗi tuyến. Nếu một Controller và Action Method phù hợp được tìm thấy trên một tuyến cụ thể, thì dữ liệu được yêu cầu sẽ được chuyển tiếp đến phần còn lại của MVC Framework sẽ tạo ra phản hồi. Có hai loại routing có sẵn trong MVC là:

Cấu hình Routing

Loại định tuyến này sử dụng các mẫu định tuyến của ứng dụng để khớp một URL với các Action Method của Controller.

Phương pháp cấu hình routing được triển khai bên trong file Startup.cs. Trong Startup.cs, phương thức UseEndpoints() đăng ký các tuyến đang được cung cấp cho nó dưới dạng tham số bên trong phương thức MapControllerRoute.

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    
    //....
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
    
        app.UseEndpoints(endpoints =>
        {
            //....
        
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Routing Attribute

Routing Attribute
RoutingAttribute được định nghĩa bên trên một Action Method trong Controller

Loại định tuyến này được thực hiện thông qua RouteAttribute và được sử dụng trực tiếp cho Controller hoặc Action Method cụ thể.

RoutingAttribute được định nghĩa bên trên một Action Method trong Controller như sau:

public class AuthenController : Controller
{

    [Route("/login")]
    public IActionResult Login(string returnUrl = null)
    {
        SetTitle("Đăng nhập");
        if (User.Identity.IsAuthenticated)
        {
            return LocalRedirect(returnUrl ?? "/admin");
        }
        ViewData["ReturnUrl"] = returnUrl;
        return View();
    }
}

Khởi tạo Controller

Ở giai đoạn này, quá trình khởi tạo và thực thi Controller diễn ra. Controller chịu trách nhiệm xử lý các request đến được thực hiện bằng cách ánh xạ yêu cầu tới Action Method thích hợp.

Bộ điều khiển lựa chọn Action Method thích hợp (để trả về response) trên cơ sở các mẫu định tuyến được cung cấp.

MVC RouteHandler chịu trách nhiệm chọn một action method ở dạng action descriptor. Sau đó, RouteHandler chuyển action descriptor vào trình thực thi Controller Action Invoker.

Lớp Controller Factory tạo ra thể hiện của controller để thực thi action method. Lớp Controller Factory phụ thuộc vào Controller Activator để khởi tạo controller.

Sau khi action method được chọn, thể hiện của controller sẽ thực thi action method xử lý yêu cầu. Thể hiện của controller cung cấp một số tính năng như action method, action filter và action result.

Trình kích hoạt sử dụng thuộc tính thông tin kiểu controller trên action descriptor để khởi tạo controller theo tên. Khi controller được tạo, phần còn lại của đường dẫn thực thi action method có thể thực thi.

Controller Factory là thành phần chịu trách nhiệm tạo thể hiện của controller. Controller Factory triển khai từ interface IControllerFactory. Interface này chứa hai phương thức được gọi là CreateController và ReleaseController.

Quy trình thực thi Action Method

Quy trình thực thi Action Method
Quy trình thực thi Action Method trong ASP.NET Core được điều khiển bởi ASP.NET Core MVC Framework khi một yêu cầu HTTP đến.

Quy trình chung sẽ có thứ tự các bước như sau:

Routing

Đầu tiên, hệ thống routing của ASP.NET Core sẽ xác định xem yêu cầu HTTP nên được định tuyến đến action method nào trong controller. Quyết định này dựa trên URL yêu cầu và cấu hình routing của ứng dụng.

Controller Activation

Sau khi xác định action method, MVC sẽ tìm và tạo một instance của controller tương ứng. Controller chịu trách nhiệm xử lý yêu cầu và gọi action method thích hợp.

Model Binding

Nếu action method yêu cầu dữ liệu từ yêu cầu (ví dụ: thông qua query parameters, form data, hoặc JSON), MVC sẽ thực hiện quá trình model binding để ánh xạ dữ liệu từ yêu cầu vào các tham số của action method.

Action Method Execution

Action Method Execution
Action method này có thể thực hiện các logic kinh doanh, truy cập dữ liệu, chuẩn bị dữ liệu cần thiết cho view hoặc trả về một HTTP response trực tiếp

Action method cuối cùng được gọi để xử lý yêu cầu. Action method này có thể thực hiện các logic kinh doanh, truy cập dữ liệu và chuẩn bị dữ liệu cần thiết cho view hoặc trả về một HTTP response trực tiếp.

Result Execution

Nếu action method trả về một đối tượng IActionResult hoặc một trong các dạng phổ biến như ViewResult, JsonResult, RedirectResult, thì hệ thống sẽ thực hiện kết quả (result) để tạo ra phản hồi HTTP.

View Rendering (nếu có)

Nếu action method trả về một ViewResult, quá trình này sẽ thực hiện việc render view để tạo ra nội dung HTML hoặc nội dung khác, sau đó đưa nó vào phản hồi HTTP.

Action Filters

Trong suốt quá trình thực thi action method, các Action Filters có thể được áp dụng. Action Filters là các đoạn mã được thực hiện trước và sau khi action method chạy, cho phép thực hiện các công việc như xác thực, logging, hoặc thay đổi dữ liệu yêu cầu và phản hồi.

Result Filters

Tương tự như Action Filters, Result Filters có thể được áp dụng để thực hiện các công việc trước và sau khi kết quả được thực thi.

Exception Handling

Nếu có bất kỳ ngoại lệ nào xảy ra trong quá trình thực thi action method, các bộ lọc ngoại lệ (Exception Filters) có thể được sử dụng để xử lý và chuyển hướng quy trình xử lý.

Kết lại

Trên đây là toàn bộ chia sẻ của Comdy.vn về life cycle .net core. Hi vọng những thông tin, kiến thức trong bài viết này là hữu ích và có ý nghĩa với mọi người. Xin cám ơn.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *