Nếu bạn muốn nhiều thông số tùy chọn trên cùng một tuyến đường, bạn sẽ gặp sự cố vì url của bạn phải luôn chỉ định đầu tiên để sử dụng thông số thứ hai. Chỉ vì bạn sử dụng các ràng buộc không ngăn nó đánh giá các tham số, thay vào đó nó không khớp với tuyến đường này.
Cầm lấy cái này ví dụ: /videos/3
Khi điều này đang cố gắng để phù hợp, nó tìm thấy video, và nói: "OK, tôi vẫn phù hợp". Sau đó, nó nhìn vào tham số tiếp theo, đó là Sort và nó nhận giá trị 3, sau đó kiểm tra nó dựa vào ràng buộc. Ràng buộc thất bại, và vì vậy nó nói "OPPS, tôi không phù hợp với tuyến đường này", và nó chuyển sang tuyến đường tiếp theo. Để xác định trang không có tham số sắp xếp được xác định, bạn nên xác định 2 tuyến.
//URL: /videos/rating/1
routes.MapRoute(
name: "Videos",
url: "videos/{Sort}/{Page}",
defaults: new { controller = "VideoList", action = "Index", Page = UrlParameter.Optional },
constraints: new { Sort = @"[a-zA-Z]+", Page = @"\d+"}
);
//URL: /videos/1
routes.MapRoute(
name: "Videos",
url: "videos/{Page}",
defaults: new { controller = "VideoList", action = "Index", Sort = "the actual default sort value", Page = UrlParameter.Optional },
constraints: new { Page = @"\d+"}
);
Tôi đặt các tuyến đường cụ thể nhất trước khi có thể và kết thúc với ít nhất là cụ thể, nhưng trong trường hợp này, thứ tự không quan trọng vì những ràng buộc. Ý của tôi là giá trị được xác định nhiều nhất, vì vậy trong trường hợp này, bạn cần phải xác định sắp xếp trong tuyến đầu tiên và bạn cũng có thể chỉ định trang, vì vậy nó cụ thể hơn tuyến đường chỉ với thông số trang.
Cảm ơn, điều đó đã giúp làm sáng tỏ một số vấn đề. – Maddhacker24