Route Attribute در MVC

سه شنبه 8 تیر 1395

مسیریابی تکنیک ایجاد یک الگوی URL سفارشی است که یا نقشه ها را به متد اکشن کنترلر و یا هر فایل فیزیکی از سرور را هدایت میکند. در این مقاله در باره ی Route Attribute در ASP.NET MVC صحبت میکنیم.

Route Attribute در  MVC

به طور کلی  در نرم افزار ASP کلاسیک و ASP.NET توسعه یافته، آدرس ها به طور مستقیم به فایل فیزیکی بر روی وب سرور هدایت میشوند . به عنوان مثال، زمانی که شما URL در مرورگر، می توانید مطلع شوید  که دامنه barnamenevisan.org  موجود است.

http://... .com /forum/AddPost.aspx

در اینجا URL به طور مستقیم به فایل فیزیکی بر روی دیسک هدایت میشود.

اما مورد بالا  با   ASP.NET MVC نیست، چرا که در MVC URL  وب فریم ورک به طور مستقیم به متد اکشن کنترلر به جای محل فایل فیزیکی هدایت میشود.

مسیریابی تکنیک ایجاد یک الگوی URL سفارشی است که یا نقشه ها را به متد اکشن کنترلر و یا هر فایل فیزیکی از سرور  را هدایت میکند.

در حال حاضر شما یک ایده اولیه در مورد مسیریابی دارید ، پس نسخه ی نمایشی عملی را  شروع میکنیم.

هنگامی که شما یک پروژه جدید ASP.NET ایجاد  میکنید  ، بلوک کد زیر در global.asax.cs در  رویداد Application_Start یافت میشود.

    protected void RegisterRoutes  
    {  
          AreaRegistration.RegisterAllAreas();  
          FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);  
          RouteConfig.RegisterRoutes(RouteTable.Routes);  
          BundleConfig.RegisterBundles(BundleTable.Bundles);  
    }  

در کد بالا یک متد  برای فراخوانی RegisterRoutes () وجود دارد. این تعریف متد در فایل RouteConfig.cs داخل پوشه App_Start در دسترس است.

هنگامی که پروژه MVCرا شروع میکنید،  application_start() رویداد متد  RegisterRoutes()  را فراخوانی میکند و پس از آن متد  RegisterRoutes() جدول مسیر(route table) را ایجاد میکند .  route table دارای ورودی برای مسیر است .  که به طور پیش فرض یک ورودی برای مسیر به نام "Default" وجود دارد. قبل از استفاده از Route attribute شما باید با  فراخوانی مسیرهایMapMvcAttributeRoutes ()؛ در داخل متد RegisterRoutes ()   ، آن را فعال کنید .

در ترکیبات کد بالا یک متد برای فراخوانی RegisterRoutes () وجود دارد. این تعریف متد در فایل RouteConfig.cs داخل پوشه App_Start در دسترس است

.

این  وظیفه  route table  ،برای هدایت   درخواست های ورودی URL  با استفاده از متد اکشن کنترلر است.

Action Route ها

نحوه تعریف ویژگی مسیریابی (route attribute) استاتیک روی متد اکشن کنترلر

فقط ویژگی مسیر روی متد اکشن با نام قالب نوشته میشود. نام قالب یک رشته پاس داده شده  در مسیر به عنوان مثال " contact"  است. این نام قالب درخواست های ورودی URL  را تشخیص داده و تصمیم می گیرد که براساس  فراخوانی متد اکشن  یا بر اساس معیارهای تطبیق URL باشد.

public class HomeController : Controller  
{  
        [Route("contact")]  
        public ActionResult Contact()  
        {  
            ViewBag.Message = "Your contact page.";  
            return View();  
        }  
}  

هنگامی که درخواستی همراه با آدرس  /contact در route attribute  از متد  Contact action  فراخوانی شود.
شما می توانید مسیرهای چندگانه در اکشن و یا کنترلر بنویسید . برای مثال اگر متد Contact action   را با  / Home / contact  فراخوانی کنیم  فقط آدرس  مورد نظر   [Route("home/contact")]  در اکشن متد  مینویسیم.

[Route("contact")]  
 [Route("home/contact")]   
 public ActionResult Contact()  
 {  
            ViewBag.Message = "Your contact page.";  
            return View();  
 }   

نحوه تعریف attribute های مسیریابی داینامیک(dynamic route attribute) روی متد اکشن

Dynamic route attribute ها زمانی مفید هستند که شامل مقدار مسیر داینامیک باشند. به عنوان مثال، برای نمایش رکوردهای دانشجویی خاص URL  ممکن است مانند زیر باشد

/StudnetInfo/Details/1



    public class StudentInfoController : Controller  
    {  
            [Route("studentinfo/details/{id}")]  
            public ActionResult Details(int? id)  
            {  
                return View();  
            }  
    }    

حالا وقتی درخواستی با مسیر /studentinfo/details/1 میشود. سگمنت  {id}  جایگزین  مقداری که پس از /studentinfo/details/  قرار میگیرد، است و مسیر نهایی  مانند studentinfo/details/1 خواهد شد.

در اینجا attribute های مسیر تجزیه شده (route attributes decompose) ،درخواست های ورودی URL  و موقعیت مقادیر در  RouteValueDictionary با عنوان Key  در یک فرم مشخص میکنند.

Controller Routes

به طور کلی تمام action method  ها در داخل کنترلر خاص از الگو ی همان URL ، به جز نام action  پیروی میکنند.

به عنوان مثال تمام action method ها  در Home controller  از همان الگوی URL پیروی میکنند.

Home/Index

Home/About

Home/Contact

بنابراین بهتر است برای جلوگیری از تکرار  ، از همان صفت مسیر در اکشنهای چند گانه استفاده کنیم.

به عنوان مثال:



    [Route("home/{action}")]  
    public class HomeController : Controller  
    {  
            public ActionResult Index()  
            {  
                return View();  
            }  
      
            public ActionResult About()  
            {  
                ViewBag.Message = "Your application description page.";  
      
                return View();  
            }  
    }    

زمانی که قبلا مسیر را  بر روی متد اکشن  و  کنترلر مشخص کرده باشید، چه اتفاقی می افتد؟

برای مثال :



    [Route("home/{action}")]  
    public class HomeController : Controller  
    {  
           [Route("about")]  
           public ActionResult About()  
           {  
               ViewBag.Message = "Your application description page.";  
      
               return View();  
           } 
    } 

در مورد بالا؛  route  در سطح کنترلر ، توسط اکشن route باطل خواهد شد.

آموزش asp.net mvc

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

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

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

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