Rất quan trọng.
Pipeline được ghép đúng theo thứ tự đăng ký: mỗi middleware bọc middleware kế tiếp, request đi xuôi và response đi ngược lại.
csharp
app.UseExceptionHandler("/error"); // outermost: catches everything below
app.UseRouting();
app.UseAuthentication(); // who are you?
app.UseAuthorization(); // are you allowed?
app.MapControllers();app.Use(...): chạy code rồi gọinext— có thể đi tiếp hoặc short-circuit (không gọinext, trả response luôn).app.Run(...): terminal, không cónext, pipeline kết thúc tại đó.app.Map("/admin", ...): rẽ nhánh pipeline theo path prefix.
Hai lỗi thứ tự hay gặp:
- Đặt UseAuthorization trước UseRouting → chưa biết endpoint nào được chọn nên [Authorize] không có hiệu lực; analyzer ASP0001 cảnh báo trường hợp này.
- Đặt UseExceptionHandler sau các middleware khác → exception ném ra ở tầng trên nó không được bắt.
Middleware xử lý cross-cutting cho mọi request; nếu chỉ cần chạy quanh action của MVC thì dùng filter.