Route Attribute در MVC
سه شنبه 8 تیر 1395مسیریابی تکنیک ایجاد یک الگوی URL سفارشی است که یا نقشه ها را به متد اکشن کنترلر و یا هر فایل فیزیکی از سرور را هدایت میکند. در این مقاله در باره ی Route Attribute در ASP.NET 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
- ASP.net MVC
- 3k بازدید
- 4 تشکر