از Routing برای مسیردهی یا آدرس دهی اکشن ها استفاده میشود و در این مطلب قصد داریم به آموزش کامل Routing در MVC بپردازیم پس با ما همراه باشید.
یکسری آدرس ها و مسیر ها توسط MVC خیلی دوست داشته میشوند، مثلا اگر کنترلری به نام Home و اکشنی به نام Index ایجاد کنید، MVC آن را به عنوان صفحه نخست یا همان Home Page سایت در نظر میگیرد. حال میخواهیم این تنظیمات را تغییر دهیم و یا اینکه تنظیمات جدیدی را به آن اضافه کنیم. به زبان ساده میخواهیم آدرس ها و مسیر های جدیدی را برای MVC تعریف کنیم.
لوکیشن تنظیمات Routing یا بهتر است بگوییم فایل RouteConfig در پوشه App_Start میباشد و با وارد شدن به پوشه App_Start میتوانید به فایل RouteConfig دسترسی داشته باشید و آن را ویرایش کنید.
وقتی وارد فایل RouteConfig بشوید یک MapRoute وجود دارد. در این MapRoute گفته شده، در URL ها ابتدا باید نام کنترلر و بعند نام اکشن و بعد مقدار آی دی بیاید.
url: "{controller}/{action}/{id}",
ولی اگر این موارد در Url وارد نشد به کنترلری به نام Home و اکشنی به نام Index وارد شو
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
و ما میتوانیم این MapRoute را تغییر دهیم و یا اینکه MapRoute هایی را بنا به نیاز خود ایجاد کنیم. ساختار کلی MapRoute باید به شکل زیر باشد.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
حال اگر بخواهیم MapRoute برای کنترلری به نام Authentication با اکشن Login بنویسیم. به صورتی که Url ما به این صورت باشد WebSite Name / Login به صورت زیر اقدام میکنیم.
routes.MapRoute(
name: "Login",
url: "{Login}",
defaults: new { controller = "Authentication", action = "Login"}
);
اگر این MapRoute را زیر MapRoute دیفالت بنویسیم عمل نمیکند و این آدرس را پیدا نمیکند چون اولویت با MapRoute های بالاتر است و در MapRoute بالاتر یا همان دیفالت گفته آدرس باید به این ترتیب باشد که ابتدا نام کنترلر و بعد نام اکش و در آخر آی دی، پس باید MapRoute خود را بالای MapRoute دیفالت بنویسیم و یا به زبان ساده MapRoute هایی که آدرس کوتاه تری دارند باید بالاتر قرار گیرد.
توجه داشته باشید که اولویت با MapRoute هایی است که در کد های بالاتری نوشته شده اند.
در قدیم ایجاد MapRoute به شکل بالا بود و در فایل RouteConfig اقدام به آدرس دهی میکردند ولی زمانی که آدرس ها زیاد میشد مدیریت آن سخت و بعضی مواقع غیر ممکن میشد پس بهتر و حرفه ای تر این است که از روش جدید تر استفاده شود.
در مرحله اول قبل از اولین MapRoute یا همان MapRoute دیفالت تابع زیر را فراخوانی میکنیم.
routes.MapMvcAttributeRoutes();
و در مرحله بعد کافی است در بالای اکشنی که قرار است آدرس دهی شود از اتربیوت Route استفاده شود و مقدار رشته ای آدرس را به آن بدهیم
[Route("My Route")]
توجه داشته باشید وقتی یک اکشن را Route میکنید آدرس قبلی آن حذف میشود و دیگر در دسترس نیست.
[Route("Test")]
public ActionResult ActionName()
{
return View();
}
[Route("Test1/Test2/Test3")]
public ActionResult ActionName()
{
return View();
}
[Route("GetData/{name}/{age}")]
public ActionResult ActionName(string name, int age)
{
ViewBag.Name = name;
ViewBag.Age = age;
return View();
}
[Route("GetData/{name}/{age?}")]
public ActionResult ActionName(string name, int? age)
{
ViewBag.Name = name;
ViewBag.Age = age;
return View();
}