การทำความเข้าใจการแมพเส้นทางใน ASP.Net MVC
การนำทางในโลกของ MVC (Model View Controller) สถาปัตยกรรมใน ASP.Net อาจเป็นเรื่องที่น่ากลัว โดยเฉพาะเมื่อคุณเพิ่งเริ่มต้น ความท้าทายที่พบบ่อยที่สุดที่นักพัฒนาต้องเผชิญคือการกำหนดเส้นทาง—โดยเฉพาะการแมพเส้นทางที่กำหนดเองไปยังคอนโทรลเลอร์ ในโพสต์นี้ เราจะพูดถึงปัญหาที่มักพบเห็น: การแมพไฟล์ *.aspx
ไปยัง PageController
ปัญหา: การแมพ *.aspx
ไปยัง PageController
ลองนึกภาพว่าคุณเป็นผู้เริ่มต้นใน MVC และคุณต้องการให้บริการหน้าเว็บโดยใช้ส่วนขยาย ASPX คุณอาจลองสร้างเส้นทางเช่นดังต่อไปนี้:
routes.MapRoute(
"Page",
"{name}.aspx",
new { controller = "Page", action = "Index", id = "" }
);
อย่างไรก็ตาม เมื่อคุณทดลองเส้นทางนี้โดยการป้อน URL เช่น /Page.aspx
คุณอาจพบข้อความแสดงข้อผิดพลาดที่ระบุว่าคอนโทรลเลอร์สำหรับเส้นทางนี้ไม่สามารถพบได้:
ไม่สามารถพบคอนโทรลเลอร์สำหรับเส้นทาง ‘/Page.aspx’ หรือมันไม่ได้ทำการ implement อินเตอร์เฟซ IController ชื่อพารามิเตอร์: controllerType
ข้อผิดพลาดนี้อาจทำให้คุณรู้สึกหงุดหงิด ทำให้คุณสงสัยว่ามีสิ่งใดที่คุณพลาดไป
วิธีแก้ปัญหา: ลำดับมีความสำคัญในการแมพเส้นทาง
คุณอาจโล่งใจที่จะรู้ว่าวิธีแก้ปัญหาของคุณคือการจัดลำดับเส้นทาง ASP.Net MVC จะประมวลผลเส้นทางในลำดับที่ลงทะเบียน นี่หมายความว่าหากเส้นทางเริ่มต้นถูกประกาศก่อนเส้นทางที่กำหนดเองของคุณ มันจะมีความสำคัญมากกว่า
ขั้นตอนในการแก้ไขปัญหา
-
ย้ายเส้นทางที่กำหนดเองของคุณ: ตรวจสอบให้แน่ใจว่าการแมพเส้นทางที่กำหนดเองสำหรับ
*.aspx
ถูกกำหนดไว้ ก่อน เส้นทางเริ่มต้น การลงทะเบียนที่ปรับปรุงควรมีลักษณะดังนี้:routes.MapRoute( "Page", "{name}.aspx", new { controller = "Page", action = "Index", id = "" } ); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
การทำงานของการกำหนดเส้นทาง: หลักการเหนือการกำหนดค่า
เพื่อชี้แจงตรรกะของการกำหนดเส้นทางเพิ่มเติม เราสามารถระบุได้ว่า MVC ใช้หลักการที่รู้จักกันในชื่อ หลักการเหนือการกำหนดค่า หมายความว่ากรอบงานนั้นพยายามคาดเดาว่าคำขอควรไปที่ไหนตามหลักการแทนการกำหนดค่าอย่างชัดเจน
แหล่งข้อมูลเพิ่มเติม
สำหรับผู้ที่ต้องการทำความเข้าใจเกี่ยวกับการกำหนดเส้นทางใน ASP.Net MVC มากขึ้น Scott Guthrie หนึ่งในผู้สร้าง ASP.Net ร่วมได้แบ่งปันข้อมูลที่มีคุณค่า:
ทั้งสองแหล่งข้อมูลให้ข้อมูลมากมายที่ช่วยให้คุณนำทางความซับซ้อนของ MVC และการกำหนดเส้นทางได้
สรุป
โดยสรุป การแมพหน้า *.aspx
ไปยัง PageController
ใน ASP.Net MVC อย่างประสบผลสำเร็จนั้นเกี่ยวข้องกับมากกว่าการเขียนโค้ดที่ถูกต้อง; มันต้องการความเข้าใจเกี่ยวกับลำดับของการลงทะเบียนเส้นทางและหลักการพื้นฐานของกรอบงาน โดยการตรวจสอบให้แน่ใจว่าเส้นทางที่กำหนดเองของคุณมีความสำคัญอย่างเหมาะสม คุณสามารถขจัดข้อผิดพลาดที่น่าหงุดหงิดที่เกี่ยวข้องกับกระบวนการกำหนดเส้นทางได้
ดังนั้นในครั้งถัดไปที่คุณพบว่าตนเองสับสนเกี่ยวกับการกำหนดเส้นทาง MVC อย่าลืมว่าลำดับนั้นมีความสำคัญ และค้นหาทรัพยากรที่น่าเชื่อถือเพื่อช่วยนำทางการเดินทางของคุณ