آشنایی با مفهوم Routing در MVC

دوشنبه 11 خرداد 1394

در این مقاله قصد داریم توضیحی درباره چگونگی اجرا یک صفحه با آدرس دلخواه خود در سایت را بدهیم شاید شما هم تا به حال با این مورد روبرو شده اید که به جای اینکه یک اسم طولانی در صفحه ادرس بار(Url)خود داشته باشید از یک اسم کوتاه و دلخواه مورد نظر خود در آدرس بار استفاده کنید.

آشنایی با مفهوم Routing     در MVC

در این مقاله قصد داریم توضیحی درباره چگونگی  اجرا یک صفحه با آدرس دلخواه خود در سایت  را بدهیم شاید شما هم تا به حال با این مورد روبرو شده اید که به جای اینکه یک اسم طولانی در صفحه آدرس بار((Url خود داشته باشید از یک اسم کوتاه و دلخواه مورد نظر خود در آدرس بار استفاده کنید.

در ASP.NET MVC 5 یک قابلیت جدید با نام Attribute Routing افزوده شده است که به ما این اجازه را می‌دهد تا  مسیر های سفارشی برای کنترلرها و اکشن متدهایمان با اضافه کردن یک Attribute با نام Route تعریف کنیم.

 برای شروع به کار  ابتدا یک پروژه از نوع Mvc5 ایجاد میکنیم.

ابتدا روی مدل راست کلیک کرده و یک کلاس با اسم Person ایجاد میکنیم.

همان طور که از تصویر معلوم است روی  Controller. راست کلیک کرده وAddرا میزنیم و     یک  کنترلر.  ،از نوع   Controller with views, using Entity Framework MVC 5   ایجاد میکنیم.

حال  اگر از برنامه خود اجرا بگیرید ادرس زیر را در Url میبینید.

برای شروع به کار کافی است ابتدا در App_Start    وارد کلاس RoutConfig.cs شده و routes.MapMvcAttributeRoutes();   را به کلاس RoutConfig  اضافه میکنیم.

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {


            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes();

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

حال برای فعال سازی  صفت Rout   وارد Web.config اصلی برنامه میشویم.

در قسمت system.webServer   قطعه کد زیر را اضافه میکنیم

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"></modules>
  </system.webServer>

 

حال اکنون وارد کنترلر Home   میشویم  و بالای هر یک از متد  ها از صفت  Route (به معنای مسیر ) استفاده میکنیم.

 [Route("Create.html")]
        public ActionResult Create()
        {
            return View();
        }

و اکنون اگر از Create، View  اجرا بگیریم با صفحه زیر روبرو میشویم.

 

 

برای حل این مشکل کافی است در Url،ا اسم مسیری که  به متد مورد نظر دادیم  را وارد کنیم

 

 

بخش دوم:

در این قسمت از مقاله قصد دارم که به شما بار گزاری یک صفحه با مسیردهی های مختلف را آموزش بدهم برای این کار کافی است ابتدا وارد کلاس RoutConfig شده و تغیراتی در متد RegisterRoutes  ایجاد کنیم.

public static void RegisterRoutes(RouteCollection routes)  
{  
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // new routing  
 
    routes.MapRoute("Default", "{type}/{controller}/{action}/{id}",  
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },  
        new RouteValueDictionary  
        {  
            { "type", "Customer|Admin" }   
        });  
}  

 

همان طور که در کد بالا مشاهده میکنید در  routes.MapRoute یک پارامتر ورودی دیگری به نام type ایجاد کردیم  که کاربر برای ورود به سایت قبل از اسم کنترلر باید اسم هایی  را  که به  type   دادیم را  در url  وارد کند

RouteValueDictionary : یک  شی است که شامل خواص  مربوط به یک پارامتر میشود.

حال اگر از برنامه اجرا بگیرم به مشکل زیر رو به رو میشویم.

برای حل این مشکل هم میتوان از کلمه ،   Admin و هم از Customer قبل از اسم کنتلرر استفاده کنیم

و در آخر این نکته را یاداوی کنم که دوروش مذکور، دو روش کاملا متفاوت در مسیریابی است

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید