ASP.NET MVC đã giới thiệu Routing để loại bỏ việc ánh xạ từng URL bằng một tập tin vật lý. Routing (định tuyến) cho phép chúng ta xác định mẫu URL ánh xạ tới trình xử lý yêu cầu.
Trong ứng dụng ASP.NET MVC, trình xử lý yêu cầu là phương thức hành động (action method) của một lớp Controller.
Ví dụ: http://domain/student có thể được ánh xạ tới phương thức hành động Index của StudentController trong ASP.NET MVC.
Route (tuyến) xác định mẫu URL và thông tin xử lý. Tất cả các tuyến được cấu hình của một ứng dụng được lưu trữ trong RouteTable và sẽ được sử dụng bởi công cụ định tuyến (routing engine) để xác định controller thích hợp cho yêu cầu đến.
Hình dưới đây minh họa quá trình định tuyến.
Mỗi ứng dụng ASP.NET MVC phải cấu hình ít nhất một tuyến đã được cấu hình mặc định. Bạn có thể đăng ký tuyến trong lớp RouteConfig, nằm trong tập tin RouteConfig.cs trong thư mục App_Start.
Hình ảnh dưới đây minh họa cách cấu hình tuyến trong lớp RouteConfig.
Như bạn có thể thấy trong hình trên, tuyến được cấu hình bằng phương thức mở rộng MapRoute()
của RouteCollection, trong đó tên tuyến là "Default", mẫu URL của tuyến là {controller}/{action}/{id}
và giá trị mặc định cho tham số controller, phương thức hành động và tham số id.
Giá trị tham số mặc định chỉ định controller, phương thức hành động hoặc giá trị của tham số id sẽ được sử dụng nếu chúng không tồn tại trong URL yêu cầu gửi đến.
Tương tự, bạn có thể cấu hình các tuyến khác bằng phương thức MapRoute
của RouteCollection. RouteCollection thực chất là một thuộc tính của lớp RouteTable.
Mẫu URL chỉ là phần sau của tên miền trong URL. Ví dụ: mẫu URL {controller}/{action}/{id}
sẽ có URL thật trông giống như sau: "localhost:1234/{controller}/{action}/{id}".
Phần đằng sau "localhost:1234/" sẽ được coi là mẫu URL. Phần đầu tiền ngay sau tên miền nếu có sẽ là controller. Phần tiếp theo ngay sau controller nếu có sẽ là phương thức hành động của controller. Phần tiếp theo ngay sau phương thức hành động nếu có sẽ là tham số id.
Nếu URL không chứa bất cứ thứ gì sau tên miền thì controller và phương thức hành động mặc định sẽ xử lý yêu cầu.
Ví dụ: http://localhost:1234/ sẽ được xử lý bởi phương thức HomeController và phương thức hành động Index như được cấu hình trong tham số mặc định.
Bảng sau đây cho biết controller, phương thức hành động và tham số id nào sẽ xử lý các URL khác nhau khi đánh giá tuyến mặc định ở trên.
URL | Controller | Action | Id |
---|---|---|---|
http://localhost/home | HomeController | Index | null |
http://localhost/home/index/123 | HomeController | Index | 123 |
http://localhost/home/about | HomeController | About | null |
http://localhost/home/contact | HomeController | Contact | null |
http://localhost/student | StudentController | Index | null |
http://localhost/student/edit/123 | StudentController | Edit | 123 |
Bạn cũng có thể thêm cấu hình tuyến tùy chỉnh bằng phương thức mở rộng MapRoute
. Bạn cần cung cấp ít nhất hai tham số trong MapRoute là tên tuyến và mẫu URL. Tham số mặc định là tùy chọn.
Bạn có thể đăng ký nhiều tuyến tùy chỉnh với các tên khác nhau. Hãy xem ví dụ sau nơi chúng tôi đăng ký tuyến "Student".
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Student",
url: "student/{id}",
defaults: new { controller = "Student", action = "Index"}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Như được trình bày trong đoạn mã trên, mẫu URL cho tuyến Student là students/{id}
, chỉ định rằng bất kỳ URL nào bắt đầu bằng /student, phải được StudentController xử lý.
Lưu ý rằng chúng tôi chưa chỉ định tham số {action} trong mẫu URL vì chúng tôi muốn mọi URL bắt đầu bằng sinh viên phải luôn sử dụng phương thức hành động Index của StudentController.
Chúng tôi đã chỉ định controller và phương thức hành động mặc định để xử lý bất kỳ URL yêu cầu nào bắt đầu bằng /student.
ASP.NET MVC đánh giá từng tuyến theo trình tự cấu hình. Nó bắt đầu với tuyến được cấu hình đầu tiên và nếu URL của yêu cầu đến không thỏa mãn mẫu URL của tuyến thì nó sẽ chuyển sang tuyến thứ hai, v.v.
Trong ví dụ trên, công cụ định tuyến sẽ đánh giá tuyến Student trước và nếu URL đến không bắt đầu bằng /student thì nó sẽ chuyển sang tuyến thứ hai là tuyến mặc định.
Bảng sau đây cho biết các URL khác nhau sẽ được ánh xạ tới tuyến Student như thế nào:
URL | Controller | Action | Id |
---|---|---|---|
http://localhost/student/123 | StudentController | Index | 123 |
http://localhost/student/index/123 | StudentController | Index | 123 |
http://localhost/student?Id=123 | StudentController | Index | 123 |
Bạn cũng có thể áp dụng các ràng buộc đối với giá trị của tham số bằng cách cấu hình các ràng buộc tuyến. Ví dụ: tuyến sau áp dụng một hạn chế đối với tham số id đó là giá trị của id phải là số.
routes.MapRoute(
name: "Student",
url: "student/{id}/{name}/{standardId}",
defaults: new
{
controller = "Student",
action = "Index",
id = UrlParameter.Optional,
name = UrlParameter.Optional,
standardId = UrlParameter.Optional
},
constraints: new { id = @"\d+" }
);
Vì vậy, nếu bạn đưa ra giá trị không phải là số cho tham số id thì yêu cầu đó sẽ được xử lý bởi một tuyến khác hoặc, nếu không có tuyến nào phù hợp thì lỗi "The resource could not be found" sẽ bị ném ra.
Bây giờ, sau khi cấu hình tất cả các tuyến trong lớp RouteConfig, bạn cần đăng ký nó vào sự kiện Application_Start()
trong Global.asax. Do đó, nó sẽ thêm tất cả các tuyến của bạn vào RouteTable.
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
Hình dưới đây minh họa quá trình đăng ký tuyến.
Do đó, định tuyến đóng vai trò rất quan trọng trong ASP.NET MVC.
Những điểm cần nhớ:
Application_Start
trong tập tin Global.ascx.cs.Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Bài viết này sẽ giúp bạn tìm hiểu lớp WebUtility trong ASP.NET MVC và cách nó mã hóa / giải mã dữ liệu có khả năng bị phá vỡ.
Các kỹ thuật bundle (gộp file) và minify (rút gọn file) đã được giới thiệu trong ASP.NET MVC 4 để cải thiện thời gian tải trang.
Trong hướng dẫn này, bạn sẽ tìm hiểu filter trong ASP.NET MVC là gì? Có những loại filter nào và cách sử dụng filter trong ASP.NET MVC.
Trong hướng dẫn này, bạn sẽ tìm hiểu ViewBag, ViewData và TempData là gì và cách sử dụng chúng trong ASP.NET MVC