ورود / ثبت نام
0
0

Attribute بر پایه Routing در ASP.Net MVC 5

297 بازدید
Routing

Routing

امروز با یکی از ویژگی های جدید ASP.NET MVC 5، Attribute بر اساس Routing آشنا خواهید شد.همه ی ما می دانیم که ASP.NET MVC یک پلتفرم عالی است که به ما اجازه می دهد وب اپلیکیشن ایجاد کنیم و آنها را به صورت خیلی ساده تر مدیریت کنیم. امکانات کمی در MVC می باشند که بر پایه وب اپلیکیشن هستند و نسبت به وب اپلیکشن های استاندارد یک مقدار متفاوت کار می کنند. یکی از آنها routing می باشد.

تا به حال، یک جدول routing وجو داشت که شما می توانستید آن را در Global.asax و یا حتی در RouteConfig.cs تعریف کنید.

اینجا یک کد وجود دارد که ممکن است قبلا ان را در MVC 4 دیده باشید، کد زیر مثال Route collection object می باشد

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

 مهم ترین سوال: چه چیزی برای این routing جدید نیاز است؟

و جواب: در حقیقت هیچ مشکلی با روش routing قبلی وجود نداشت و در واقع هنوز هم می توانید از آن در MVC 5 استفاده کنید و یا می توانید از این روش جدید در نسخه قدیمی استفاده کنید.

در اینجا فواید attribute based routing آمده است:

  • با ارائه دادن اطلاعات در مورد routes در عیب یابی و مشکل زدایی به توسعه دهنده کمک می کند.
  • احتمال خطا ها را کاهش می دهد، اگر یک route به طور نادرست در RouteConfig.cs اصلاح شده باشد روی کل اپلیکیشن routing تاثیر می گذارد.
  • Controller (کنترل کننده) و action names را از کل route جدا می کند.
  • راحت پیدا کردن دو routes در نقشه کلی با یک عمل.

دقیقا ببینید که چگونه آن را پیکربندی (configure) می کنیم و کار کردن آن را نیز مشاهده کنید.

ابتدا، نیاز داریم که attribute based routing را روی وب اپلیکیشن MVC فعال کنیم که با یک خط انجام می شود. تنها کاری که باید انجام دهید این استکه این خط را در RegisterRoutes قرار دهید.

public static void RegisterRoutes(RouteCollection routes)   
{   
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");   
   
tes.MapMvcAttributeRoutes(); //Enables Attribute Based Routing   
   
    routes.MapRoute(   
        name: "Default",   
        url: "{controller}/{action}/{id}",   
        defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }   
    );   
   
       
}  

اکنون، اینجا چگونگی استفاده از attribute based routing در یک action method خاص می باشد.

[Route("products/{id?}")]   
      public ActionResult Details(string id)    
      {   
          if (string.IsNullOrEmpty(id))    
          {   
              return View("List", GetProductList());   
          }   
             
          return View("Details", GetProductDetails());   
      }  

همان طور که در روش بالا نشان داده شد، Route  روی یک Details action تعریف شد که به کاربران اجازه می دهد به صفحه ی جزئیات محصول دسترسی پیدا کنند حتی با این آدرس:

/Product/Details/Id or /products/id

حتما علامت سوال در route بالا را دیده اید، به این دلیل است که شناسه (id) یک پارامتر اختیاری می باشد و action method logic فقط برسی می کند که آن صفر (خالی) نباشد. به شما صفحه ی لیست محصولات را نشان می دهد.

Route Prefixes

Route Prefixes چیز مهمی نیستند، اما پیشوند های (prefix) هر route که می خواهیم آن را اجرا کنیم، نیاز است که آن را برایcontroller تعریف کنیم که در نتیجه همه ی action methods در آن می توانند از آن ، پیروی کنند.

[RoutePrefix("products")]   
    public class ProductController : Controller   
    {   
        //This will be translated to /products   
   
        [Route]   
        public ActionResult List()   
        {   
            return View();   
        }   
   
        //This will be translated to /products/2   
   
        [Route("{id?}")]   
        public ActionResult Details(string id)    
        {   
            if (string.IsNullOrEmpty(id))    
            {   
                return View("List");   
            }   
               
            return View("Details");   
        }   
}  

محدودیت های Route

محدودیت های Route مجموعه ای از قوانین هستند که می توانید آن را روی routing model خود تعریف کنید، پارامتر هایی که کاربران نیاز دارند وقتی به routes تعریف شده دسترسی پیدا می کنند آن ها را پیروی کنند.

برای تعریف محدودیت ها از کارکتر “:” استفاده می کنیم. به مثال توجه کنید.

مثال:

//route gets called as /products/productname   
    [Route("products/{id:alpha}")]   
        public ActionResult GetProduct(string name)   
        {   
            return View();   
        }   
   
//route gets called as /products/2   
        [Route("products/{id:int}")]   
        public ActionResult GetProduct(int id)   
        {   
            return View();   
        }  

ممکن است شما در مثال بالا در بین اسم متود ها پارامتر های route یکسانی داشته باشید و اینکه یک محدودیت برای آن وجود دارد. به عبارت دیگر اگر با یک پارامتر string به route دسترسی پیدا شود متود اول فراخوانده می شود و اگر با یک عدد صحیح به route دسترسی پیدا شود متود دوم اجرا می شود.

هم چنین می توانید محدودیت های route ویژه خود را با استفاده از IRouteConstraint تعریف کنید.

محیط Route

محیط Route راه مشخص کردن آن می باشد، اساسا باید به Route اجازه دهید که آگاه باشد که controller به یک محل تعلق دارد.

[RouteArea("business")]   
    [RoutePrefix("products")]   
    public class ProductController : Controller   
    {   
        //This will be translated to /business/products/list   
   
        [Route]   
        public ActionResult List()   
        {   
            return View();   
        }   
}  

 

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=16617
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
مسعود شریفی پور
از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.
مطالب بیشتر
برچسب ها:

نظرات

0 نظر در مورد Attribute بر پایه Routing در ASP.Net MVC 5

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

هیچ دیدگاهی نوشته نشده است.