ฉันเพิ่งเจอคำถามนี้และถึงแม้ว่ามันจะค่อนข้างเก่า แต่ก็ยังมีความเกี่ยวข้องมาก กระแทกแดกดันหนึ่งความคิดเห็นที่ถูกต้องในหัวข้อนี้ถูกโพสต์โดยเริ่มต้นสารภาพใน MVC เมื่อเขาเขียนโพสต์ แม้แต่เอกสาร ASP.NET ก็ยังไม่ถูกต้องทั้งหมด ฉันมีโครงการขนาดใหญ่และฉันประสบความสำเร็จในวิธีการดำเนินการมากเกินไป
หากมีความเข้าใจในการกำหนดเส้นทางนอกเหนือจากรูปแบบเส้นทางเริ่มต้น {controller} / {action} / {id} อย่างง่ายอาจเป็นที่ชัดเจนว่าการกระทำของตัวควบคุมสามารถแมปได้โดยใช้รูปแบบที่ไม่ซ้ำกัน มีคนที่พูดถึง polymorphism และพูดว่า: "HTTP ไม่เข้าใจ polymorphism" แต่การกำหนดเส้นทางไม่เกี่ยวข้องกับ HTTP มันเป็นเพียงกลไกสำหรับการจับคู่รูปแบบสตริง
วิธีที่ดีที่สุดในการทำให้งานนี้คือการใช้แอตทริบิวต์การกำหนดเส้นทางตัวอย่างเช่น:
[RoutePrefix("cars/{country:length(3)}")]
public class CarHireController
{
[Route("{location}/{page:int=1}", Name = "CarHireLocation")]
public ActionResult Index(string country, string location, int page)
{
return Index(country, location, null, page);
}
[Route("{location}/{subLocation}/{page:int=1}", Name = "CarHireSubLocation")]
public ActionResult Index(string country, string location, string subLocation, int page)
{
//The main work goes here
}
}
การกระทำเหล่านี้จะดูแล URL ที่ชอบ/cars/usa/new-york
และ/cars/usa/texas/dallas
ซึ่งจะจับคู่กับการกระทำดัชนีครั้งแรกและครั้งที่สองตามลำดับ
การตรวจสอบคอนโทรลเลอร์ตัวอย่างนี้เห็นได้ชัดว่ามันเกินกว่ารูปแบบเส้นทางเริ่มต้นที่กล่าวถึงข้างต้น ค่าเริ่มต้นใช้งานได้ดีหากโครงสร้าง URL ของคุณตรงกับหลักการตั้งชื่อรหัสของคุณอย่างแน่นอน แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป รหัสควรเป็นคำอธิบายโดเมน แต่ URL มักจะต้องดำเนินการต่อไปเพราะเนื้อหาควรเป็นไปตามเกณฑ์อื่นเช่นข้อกำหนด SEO
ประโยชน์ของรูปแบบการกำหนดเส้นทางเริ่มต้นคือสร้างเส้นทางที่ไม่ซ้ำกันโดยอัตโนมัติ สิ่งนี้ถูกบังคับใช้โดยคอมไพเลอร์เนื่องจาก URL จะตรงกับชนิดของตัวควบคุมและสมาชิกที่ไม่ซ้ำกัน การหมุนรูปแบบเส้นทางของคุณจะต้องใช้ความคิดอย่างรอบคอบเพื่อให้แน่ใจว่ามีเอกลักษณ์และใช้งานได้
หมายเหตุสำคัญข้อเสียเปรียบประการหนึ่งคือการใช้การกำหนดเส้นทางเพื่อสร้าง URL สำหรับการดำเนินการที่มากเกินไปจะไม่ทำงานเมื่อใช้ชื่อการกระทำเช่นเมื่อใช้ UrlHelper.Action แต่มันจะใช้งานได้หากมีการใช้เส้นทางที่มีชื่อเช่น UrlHelper.RouteUrl และการใช้เส้นทางที่มีชื่อนั้นเป็นไปตามแหล่งที่ได้รับการยอมรับอย่างดีวิธีที่จะเดินทางต่อไป ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ )
โชคดี!