ฉันกำลังสร้างแอป ASP.NET MVC ขณะนี้ลิงก์ของฉันมีลักษณะดังนี้:
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904
/Service/Offer/767619da-c5e6-e511-948f-005056e529a5
ฉันอยากให้พวกเขามีลักษณะดังนี้:
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/campain-user-friendly-text-taken-from-the-db
/Service/Offer/767619da-c5e6-e511-948f-005056e529a5/service-user-friendly-text-taken-from-the-db
ซึ่งหมายความว่าเมื่อคุณเข้าถึง
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/
คุณควรได้รับ 301 และถูกเปลี่ยนเส้นทางไปที่/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/campain-user-friendly-text-taken-from-the-db
นอกจากนี้ เมื่อคุณโพสต์ไปที่
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/campain-user-friendly-text-taken-from-the-db
และในวิธีการที่คุณทำreturn View(vm);
ก็ควรจะเก็บ URL นั้นไว้และสุดท้ายแต่ไม่ท้ายสุด เมื่อคุณใช้ @Html.ActionLink("คลิกที่นี่", "ภาพรวม", "แคมเปญ") ฉันอยากให้สร้างลิงก์ที่มีข้อความที่เป็นมิตรกับผู้ใช้ (ซึ่งจะเป็นอย่างอื่นในกรณีของแคมเปญ) และบริการ)
วิธีแก้ปัญหาที่ง่ายที่สุดสำหรับสิ่งที่ฉันต้องการคืออะไร? ฉันนึกถึงสิ่งที่ฉันสามารถทำได้ด้วยการกำหนดเส้นทางและส่วนขยาย htmlHelper บางตัว แต่ฉันรู้สึกว่าฉันกำลังทำให้มันซับซ้อนเกินไป และฉันกำลังคิดค้นสิ่งใหม่ขึ้นมาใหม่ ฉันเหรอ?
มีการถามคำถามยิ้มที่นี่: ฉันจะสร้าง URL ที่ใช้งานง่ายเช่น stackoverflow ได้อย่างไร ? แต่มันไม่ตอบคำถามของฉัน
FilterAttribute
สามารถทำงานได้คือถ้าชื่อคอนโทรลเลอร์ของคุณตรงกับชื่อตารางของคุณทุกประการ (หรืออย่างน้อยก็แบบแผนบางอย่างเพื่อให้คุณสามารถจับคู่พวกมันได้) และเรียกเมธอดGetSlug(Guid ID)
ทั่วไปบางอย่าง - person   schedule 18.03.2016protected IRepository<TEntity> Repository
คุณจะสามารถใช้บางอย่างเช่นstring slug = filterContext.Controller.Repository.GetSlug(filterContext.ActionParameters["ID"]);
- person   schedule 18.03.2016