.NET Core middleware pipeline

Từ khoá middleware được sử dụng trong nhiều ngữ cảnh trong công nghệ phần mềm. Trong .NET Core, middleware là các C# class đứng giữa (middle) User và Controller, can thiệp vào request và response. Middleware có thể
Xử lý request và trả về response ngay lập tức, chặn không cho request chạm tới Controller.
Xử lý request, sửa đổi và chuyển tiếp đến một middleware khác.
Xử lý response, sửa đổi và chuyển tiếp đến một middleware khác hoặc trả về cho client.
Chồng lên nhau (vì thế nên được gọi là đường ống → pipeline)
Ta có thể sử dụng middleware theo nhiều cách khác nhau. Ví dụ: một logging middleware có thể ghi chú thời gian nhận request cho đến lúc trả về response.
Một trong những trường hợp sử dụng phổ biến nhất của middleware là dành cho các use case được sử dụng đi sử dụng lại mà tách biệt khỏi nhau (cross-cutting concerns). Bao gồm những khía cạnh như:
Logging mỗi request
Thêm security header cho response
Gắn thông tin user cho request
Điều chỉnh ngôn ngữ
Trong mỗi ví dụ này, middleware sẽ nhận được request, sửa đổi request đó, sau đó chuyển request đó đến middleware tiếp theo trong pipeline. Middleware tiếp theo có thể sử dụng các chi tiết được middleware trước đó thêm vào để xử lý request.
Nên nhớ rằng middleware được thực thi theo thứ tự chúng được add trong
Program.cs
(hoặcStartup.cs
), và thứ tự này rất quan trọng.
Một số loại middleware sẵn có của hệ thống
Routing middleware
Mục đích: Đọc request url và http method và ánh xạ nó với endpoints đã được định nghĩa trong app (Controller actions, Razor Pages, Minimal API endpoints). Tuy nhiên routing middleware chỉ chọn đúng endpoint để xử lý request nhưng chưa hề thực thi.
Configuration: app.UseRouting();
Vị trí: Cần đặt trước bất kỳ middleware nào cần biết thông tin endpoint sẽ được thực thi. Thông thường sẽ là trước authentication, authorization middleware
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
Authentication middleware
Mục đích: Thực hiện xác thực người dùng.
Configuration:
app.UseAuthentication();
Vị trí: Bắt buộc đặt sau
UseRouting()
(để biết được endpoint sẽ được thực thi có cần authentication không) nhưng phải đặt trướcUseAuthorization()
(vì authorization cần biết thông tin user trước khi phân quyền).
Authorization middleware
Mục đích: Quyết định cấp quyền người dùng, nếu người dùng không có đủ quyền hạn, authorization middleware sẽ trả về response luôn và không cần chuyển tiếp vào Controller Action
Configuration:
app.UseAuthorization();
(Cần đăng ký authorization services nhưbuild.Services.AddAuthorization(...)
vào Dependency Injection Container để middleware sử dụng).Placement: Đặt sau
UseAuthentication()
(cần được biết thông tin của User)
Controller Action (endpoint middleware)
Nơi thực sự thực thi Controller action, nằm trong cùng trong middleware pipeline.
Thực chất ngoài controller action, đối với các kiểu project khác chúng gọi các hàm đó, như là:
Razor Page handler method.
Minimal API request delegate
SignalR Hub method.
gRPC Service method.
Subscribe to my newsletter
Read articles from Anh Phan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
