Routing là gì?
ASP.NET Core controllers sử dụng Routing middleware để match URLs của incoming requests và map chúng đến các actions. Route templates:- Được định nghĩa tại startup trong
Program.cshoặc trong attributes - Mô tả cách URL paths được match đến actions
- Được dùng để generate URLs cho links trong responses
Thiết lập Conventional Route
Cấu hình mặc định
ASP.NET Core MVC template tạo conventional routing code như sau:Giải thích Route Template
Lưu ý: Route template định nghĩaidlà optional. Khiidbị omit khỏi URL, model binding setidthành0, và thường không tìm thấy entity nào trong database matchingid == 0.
Conventional Routing
Nguyên tắc cơ bản
Conventional routing thiết lập quy ước cho URL paths:Ví dụ Controller
Lợi ích của Conventional Routing
- URL nhất quán cho CRUD operations
- Không cần tạo URL pattern mới cho mỗi action
- UI dễ dự đoán
Khuyến nghị: Hầu hết apps nên chọn một routing scheme cơ bản và descriptive để URLs dễ đọc và có ý nghĩa.
Nhiều Conventional Routes
Có thể cấu hình nhiều conventional routes bằng cách thêm nhiềuMapControllerRoute và MapAreaControllerRoute:
Thứ tự ưu tiên
- Routes thêm trước có ưu tiên cao hơn
- Routes cụ thể nên đặt trước
- Routes greedy (catch-all
{*article}) nên đặt sau
Attribute Routing
Giới thiệu
REST APIs nên dùng attribute routing để model app’s functionality như một tập resources, với operations được biểu diễn bằng HTTP verbs.Cấu hình Controller với Attribute Routing
HTTP Verb Templates
ASP.NET Core cung cấp các HTTP verb templates:Kết hợp Routes
Token Replacement
Dùng[controller] và [action] để tự động thay thế tên:
Route với Route Constraints
Giải quyết Ambiguous Actions
Khi hai endpoints match qua routing:
Lưu ý: Nếu routing không thể chọn candidate tốt nhất, nó sẽ throw AmbiguousMatchException.
Route Names
Route names cung cấp tên logic cho route, dùng cho URL generation:Reserved Route Parameter Names
Khi dùng Controllers hoặc Razor Pages
Trong Razor View/Page Context
page, using, namespace, inject, section, inherits, model, addTagHelper, removeTagHelper là reserved.
So sánh Conventional vs Attribute Routing
Khuyến nghị: REST APIs → Attribute Routing. Web UI apps với CRUD → Conventional Routing là điểm khởi đầu tốt.