Attribute Routing ใน MVC 5
ก่อน MVC 5 คุณสามารถแมป URL กับroutes.MapRoute(...)
แอ็คชันและคอนโทรลเลอร์เฉพาะได้โดยเรียกในไฟล์ RouteConfig.cs นี่คือที่เก็บ url สำหรับโฮมเพจ ( Home/Index
) อย่างไรก็ตามหากคุณแก้ไขเส้นทางเริ่มต้นตามที่แสดงด้านล่าง
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
โปรดทราบว่าสิ่งนี้จะส่งผลต่อ URL ของการดำเนินการและตัวควบคุมอื่น ๆ ตัวอย่างเช่นหากคุณมีชื่อคลาสคอนโทรลเลอร์ExampleController
และมีการเรียกใช้วิธีการดำเนินการภายในDoSomething
นั้น url เริ่มต้นที่คาดไว้ExampleController/DoSomething
จะไม่ทำงานอีกต่อไปเนื่องจากเส้นทางเริ่มต้นมีการเปลี่ยนแปลง
วิธีแก้ปัญหาสำหรับวิธีนี้คืออย่ายุ่งกับเส้นทางเริ่มต้นและสร้างเส้นทางใหม่ในไฟล์ RouteConfig.cs สำหรับการดำเนินการและตัวควบคุมอื่น ๆ เช่นนั้น
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Example",
url: "hey/now",
defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);
ตอนนี้DoSomething
การกระทำของExampleController
ชั้นจะถูกแมปไปยัง hey/now
URL แต่สิ่งนี้อาจเป็นเรื่องน่าเบื่อที่ต้องทำทุกครั้งที่คุณต้องการกำหนดเส้นทางสำหรับการกระทำต่างๆ ดังนั้นใน MVC 5 ตอนนี้คุณสามารถเพิ่มแอตทริบิวต์เพื่อจับคู่ URL กับการกระทำเช่นนั้นได้
public class HomeController : Controller
{
// url is now 'index/' instead of 'home/index'
[Route("index")]
public ActionResult Index()
{
return View();
}
// url is now 'create/new' instead of 'home/create'
[Route("create/new")]
public ActionResult Create()
{
return View();
}
}