Pipeline đơn giản tình huống 3: một ứng dụng minimal API (tiếp tục)
Điểm quan trọng khác về code trên là rằng trật tự trong đó bạn thêm middleware vào WebApplication object là trật
tự trong đó middleware được thêm vào pipeline. Trật tự của các lời gọi trong code trên tạo một pipeline tương tự
như cái thể hiện trong ảnh dưới.
ASP.NET Core web server truyền yêu cầu đi đến tới developer exception page middleware trước tiên. Exception-handler
middleware bỏ qua yêu cầu vào ban đầu; mục đích của nó là bắt bất cứ ngoại lệ nào ném ra bởi middleware sau này
trong pipeline, như bạn sẽ thấy trong học phần sau. Nó là quan trọng cho middleware này sẽ được đặt sớm trong
pipeline để rằng nó có thể bắt các lỗi sinh ra bởi middleware sau này.
Developer exception page middleware truyền yêu cầu lên tới middleware file tĩnh. Cái xử lí file tĩnh khởi tạo
một trả lời nếu yêu cầu tương ứng với một file; mặt khác, nó truyền yêu cầu lên tới routing middleware. Routing
middleware chọn một minimal API endpoint dựa trên các endpoints được định nghĩa và URL yêu cầu, và endpoint
middleware thực thi minimal API endpoint được lựa chọn. Nếu không endpoint nào có thể xử lí URL được yêu cầu,
dummy middleware tự động trả về một trả lời 404.
Trong học phần trước, tôi đã đề cập rằng WebApplication thêm RoutingMiddleware vào bắt đầu của middleare pipeline
tự động. Nên bạn có thể tự hỏi tại sao tôi công khai thêm nó vào pipeline trong code trên sử dụng UseRouting().
Câu trả lời, lại một lần nữa, liên quan tới trật tự của middleware. Thêm một lời gọi công khai tới UseRouting()
thông báo WebApplication không thêm RoutingMiddleware tự động trước middleware được định nghĩa trong Program.cs.
Cái này cho phép chúng ta di chuyển RoutingMiddleware sẽ được đặt sau StaticFileMiddleware. Mặc dù bước này
không cần thiết nghiêm ngặt trong trường hợp này, nó là thực hành tốt. StaticFileMiddleware. không sử dụng routing,
nên nó thích hơn để middleware này check liệu yêu cầu đi đến là cho một file tĩnh; nếu như vậy nó có thể đoản
mạch pipeline và tránh lời gọi không cần thiết tới RoutingMiddleware.
Chú ý Trong các phiên bản 1.x và 2.x của ASP.NET Core, routing và endpoint middleware đã được kết hợp trong một
bộ phận middleware Model-View-Controller (MVC) đơn. Chia tách trách nhiệm cho routing khỏi thực thi làm nó có
thể điền middleware giữa routing và endpoint middleware. Tôi thảo luận routing xa hơn trong các học phần sau.