بررسی Routing در ASP.NET MVC #2

بررسی Routing در ASP.NET MVC #2

در این پست از وبسایت پرووید در رابطه با بررسی Routing در ASP.NET MVC #2 صحبت خواهیم کرد. معماری MVC از معمول ترین و پرکاربردترین معماری های ساخت وب اپلیکیشن ها می باشد.

در قسمت قبلی از این آموزش در رابطه با پیکربندی یک Route در MVC صحبت کردیم.

بررسی URL Pattern در MVC

برای Register کردن یک Route به URL Pattern نیاز داریم. در مثالی که در قسمت قبل بررسی شد “{controller}/{action}/{id}” یک URL Pattern است. در واقع هر چیزی که بعد از Domain Name می آید یک URL Pattern است. به عبارت دیگر در localhost:1234/{controller}/{action}/{id} قسمت localhost:1234/ همان Domain Name و {controller}/{action}/{id} یک URL Pattern است که مشخص کننده ی نام Controller و Action Method درون آن Controller و پارامتر ورودی آن Action Method است. تصویر زیر این موضوع را نشان می دهد.

اگر در URL نام Controller و Action Method مشخص نشده باشد، مقدار پیش فرضی که در Route پیکربندی شده اند لحاظ می شوند. به عبارتی، در http://lcoalhost:1234 که نه Controller و نه Action Method مشخص شده اند، از HomeController به عنوان Controller و Index به عنوان Action Method مناسب برای ارسال Response استفاده می شود. این موضوع به دلیل پیکربندی route مورد نظر انجام می پذیرد. در رابطه با route ها در بسته ی آموزش ویدئویی MVC و Entity Framework در قالب پروژه وبسایت پرووید بیشتر صحبت کرده ایم.

آموزش عملی ساخت یک پروژه ASP.NET Core MVC و Entity Framework Core

از شما دعوت می کنیم که از آموزش عملی ساخت یک پروژه ASP.NET Core MVC و Entity Framework Core دیدن کنید.

در جدول زیر مثال هایی از URL های متفاوت و Controller و Action Method مناسب برای پردازش هر کدام مشاهده می شود.

پیکربندی چندین Route در MVC

دقت کنید که در برنامه های MVC مجبور نیستید که فقط یک Route داشته باشید. می توانید چندین Route را با همان MapRoute که به عنوان یک Extension Method در قسمت های قبلی معرفی شد استفاده کنید. در رابطه با Extension Method ها در بسته ی آموزش ویدئویی سی شارپ دات نت وبسایت پرووید بیشتر صحبت کرده ایم. در این متد حداقل باید دو پارامتر لحاظ شود: نام Route مورد نظر و URL Pattern آن. پارامتر مربوط به تعریف کردن Controller و Action Method های پیشفرض اختیاری یا اصطلاحاً Optional هستند.

بیایید کار را در قالب یک مثال بررسی کنیم. در مثال زیر نحوه ی تعریف کردن یک Route به نام Student را مشاهده می کنید.

public class RouteConfig

{

public static void RegisterRoutes(RouteCollection routes)

{

routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

routes.MapRoute(

name: “Student”,

url: “students/{id}”,

defaults: new { controller = “Student”, action = “Index”}

);

routes.MapRoute(

name: “Default”,

url: “{controller}/{action}/{id}”,

defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }

);

}

}

بسته ی آموزش ویدئویی مقدماتی ASP.NET MVC

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی مقدماتی ASP.NET MVC دیدن کنید.

همانطور که در کد بالا مشاهده می کنید، URL Pattern مربوط به این Route که Student نیز نام دارد به صورت students/{id} است. بر اساس این URL Pattern هر URL ای که به صورت domainName/students باشد باید توسط یک Controller با نام StudentController هندل شود.

دقت کنید که در این URL Pattern ما قسمت {action} که به منظور تعریف کردن Action Method است را تعریف نکرده ایم. این موضوع باعث می شود که هر URL ای که با کلمه ی Student آغاز می شود، توسط یک Action Method با نام Index که در StudentController وجود دارد Handle شود. به عبارت دیگر با تعریف قسمت Defaults به سادگی Controller پیش فرض و Action Method پیش فرض برای تمامی URL Request هایی که به شکل domainname/students می باشند را مشخص کرده ایم.

نکته ی دیگری که باید به آن دقت کرد این است که MVC به صورت ترتیبی Route های Register شده را بررسی می کند و سعی می کند که URL مورد نظر را با یکی از آن Route ها Match کند. در مثال بالا، Routing Engine در ابتدا route اول یعنی Student را بررسی کرده و سعی می کند که URL مورد نظر را با آن Match کند. اگر URL با /students آغاز نشده باشد، (به عبارتی توسط Route اول قابل پردازش نباشد) سپس Route دوم بررسی می شود. Route دوم یک Default Route است. در جدول زیر نحوه ی Match شدن هر کدام از Route ها را با Student مشاهده می کنید.

در قسمت بعدی از این آموزش در رابطه با پیاده سازی Route Constraint ها صحبت خواهیم کرد.

مرتضی گیتی
بدون نظر

ارسال نظر

نظر
نام
ایمیل
وب سایت