การทำความเข้าใจการแมพเส้นทางใน 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 จะประมวลผลเส้นทางในลำดับที่ลงทะเบียน นี่หมายความว่าหากเส้นทางเริ่มต้นถูกประกาศก่อนเส้นทางที่กำหนดเองของคุณ มันจะมีความสำคัญมากกว่า

ขั้นตอนในการแก้ไขปัญหา

  1. ย้ายเส้นทางที่กำหนดเองของคุณ: ตรวจสอบให้แน่ใจว่าการแมพเส้นทางที่กำหนดเองสำหรับ *.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 อย่าลืมว่าลำดับนั้นมีความสำคัญ และค้นหาทรัพยากรที่น่าเชื่อถือเพื่อช่วยนำทางการเดินทางของคุณ