مسیریابی در ASP.NET Core MVC
شناسه پست: 3331
بازدید: 1703

در این مقاله، ما قصد داریم در مورد قابلیتهای مسیریابی (routing) در ASP.NET Core MVC صحبت کنیم. همچنین میخواهیم نحوه تنظیم route ها به دو شیوه مختلف را یاد بگیریم.

اگر برخی از مقالات قبلی این آموزشی سریالی را ندیده اید، توصیه می کنیم صفحه مربوط به این سری آموزشی را مشاهده کنید: آموزش سریالی ASP.NET Core MVC.

برای دانلود سورس مقاله، روی این لینک مراجعه کنید: مسیریابی در  ASP.NET Core MVC.

ما این مقاله را به قسمتهای زیر تقسیم میکنیم:

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

مسیریابی در ASP.NET Core MVC

مسیریابی، فرآیندی است که از طریق آن، اپلیکیشن، یک مسیر URL ورودی را مورد بررسی قرار داده و action method های متناظر با آن URL را اجرا می‌کند. ASP.NET Core MVC، از یک میان افزار (middleware) مسیریابی برای تطبیق URL های درخواست های ورودی و map کردن آنها به action method های متناظر استفاده میکند.

ما میتوانیم route ها را یا در کلاس startup یا به عنوان attribute ها تعریف کنیم. این دو روش تعیین میکنند که چطور ما میتوانیم مسیرهای URL را با action method ها تطبیق دهیم. همچنین می‌توانیم از route ها، برای تولید URL برای لینکهایی که در response ها ارسال می‌شوند استفاده کنیم.

دو نوع مسیریابی برای اکشن متدها وجود دارد:

مسیریابی قراردادی

زمانیکه ما با استفاده از قالب پیشفرض، یک اپلیکیشن جدید ASP.NET Core MVC ایجاد میکنیم، آنگاه، اپلیکیشن یک مسیریابی پیشفرض برای ما تنظیم میکند. اجازه دهید یک اپلیکیشن ساخته و آن را امتحان کنیم.

بعد از ایجاد یک پروژه جدید با استفاده از قالب پیشفرض ASP.NET Core MVC، نگاهی به کلاس startup.cs بیندازیم. اینجا میتوانیم ببینیم که اپلیکیشن، یک قانون مسیریابی پیشفرض را در متد ()Configure تنظیم کرده است:

داخل قسمت فراخوانی ()UseEndpoints، از متد ()MapControllerRoute برای ایجاد یک route با نام default استفاده میکنیم.

MVC، قالب پیشفرض مسیر را به صورت {id?}/{action=Index}/{controller=Home} تنظیم میکند. این الگو، به طور پیشفرض، متد ()Index در HomeController را با یک پارامتر اختیاری به نام id تطبیق میدهد. این الگو، همچنین یک URL مانند Books/Details/5/ را نیز تطبیق داده و آن را پوشش میدهد و مقادیر route را { controller = Books, action = Details, id = 5 } با توکن کردن مسیر، استخراج میکند. MVC سعی می‌کند کنترلری به نام BooksController را پیدا کرده و با ارسال پارامتر id به‌عنوان 5، اکشن متد ()Details را اجرا کند.

اپلیکیشن را اجرا کنیم و یک breakpoint در متد ()Index در HomeController قرار دهیم. میبینیم که این متد به طور پیشفرض اجرا میشود. این به این دلیل است که ما این را به عنوان مقادیر پیشفرض در route تعریف کرده ایم.

حالا route پیشفرض را تغییر میدهیم. برای این منظور، یک کنترلر جدید به نام BooksController با یک اکشن متد ()Details و یک پارامتر اختیاری به نام id اضافه میکنیم:

سپس یک view برای اکشن متد ()Details ایجاد میکنیم:

به محض اینکه اینها درست شدند، بیایید مسیر پیش فرض را در کلاس startup تغییر دهیم:

حالا برنامه را یکبار دیگر اجرا میکنیم. میبینیم که به طور پیشفرض، متد ()Details در BooksController اجرا میشود:

مسیریابی در ASP.net Core MVC

در این قسمت، ما نحوه کارکرد مسیریابی قراردادی و نحوه تنظیم route پیشفرض برای یک اپلیکیشن را یاد گرفتیم. حالا ببینیم چطور میتوانیم چند route را با هم پیکربندی کنیم.

مسیرهای چندگانه

ما میتوانیم با چندمرتبه فراخوانی ()MapRoute داخل ()UseEndpoints، چند route را اضافه کنیم. این به ما این امکان را می دهد که چندین قرارداد را تعریف کنیم یا مسیرهایی را اضافه کنیم که به یک اکشن متد خاص اختصاص داده میشوند:

blog route اینجا، یک route قراردادی اختصاصی است. این از سیستم مسیریابی قراردادی استفاده میکند، اما به یک action خاص اختصاص داده شده است. از آنجایی که اینجا، controller و action در قالب route به عنوان پارامتر ظاهر نشده اند، میتوانند فقط مقادیر پیشفرض داشته باشند و بنابراین این route، همیشه به اکشن متد ()BlogController.Article مپ خواهد شد.

مسیرها در route collection به ترتیب اولویت قرار میگیرند و به همان ترتیبی که ما آنها را اضافه میکنیم مورد پردازش قرار میگیرند. بنابراین در این مثال، MVC، برای درخواستهایی که به سمت اپلیکیشن می آید، برای تطبیق دادن درخواست به route مورد نظر، blog route را قبل از default route مورد بررسی قرار داده و امتحان میکند.

اینکه در زمان ایجاد route ها، یک نام برای آنها تعیین میکنیم همیشه رویکرد خوبی است، چرا که آن، یک نام منطقی به route میدهد، طوریکه ما میتوانیم از route نامگذاری شده برای تولید URL استفاده کنیم.

تا اینجا، ما نحوه تنظیم مسیریابی قراردادی را بررسی کردیم. در مرحله بعد، مسیریابی بر اساس Attribute را یاد میگیریم.

مسیریابی بر اساس Attribute

با قرار دادن یک route بر روی controller یا action method، میتوانیم استفاده از ویژگی مسیریابی بر اساس Attribute را فعال سازیم.

اجازه دهید متد ()Configure در کلاس startup.cs را اصلاح کنیم و route های پیشفرض که پیشتر تعریف کرده بودیم را حذف کنیم.

حالا BooksController را با تعریف attribute های سفارشی در آن، اصلاح میکنیم:

ما مسیرهای /، /Home یا /Home/Index را برای اکشن ()BooksController.Index و Home/Details/{id}/ را برای متد ()Details مشخص کرده ایم. هنگام استفاده از مسیریابی بر اساس Attribute، نام کنترلر و نام اکشن متد، دیگر هیچ نقشی در انتخاب اکشن متدی که باید اجرا شود ندارند.

همچنین میتوانیم از ویژگی های Http[Verb] برای مسیریابی بر اساس Attribute نیز استفاده کنیم:

اینجا، برای مسیر books/، زمانیکه HTTP verb از نوع GET است، MVC اکشن ()ListBooks و زمانیکه از نوع POST است، اکشن ()CreateBook را اجرا خواهد کرد.

Route attribute های تعریف‌شده بر روی controller با route attribute های جداگانه بر روی action method ها ترکیب می‌شوند تا URL کامل را تشکیل دهند. هر قالب route تعریف شده بر روی controller به ابتدای قالبهای route تعریف شده بر روی تمام اکشن متدهای خودش میچسبد. زمانیکه ما یک route attribute را بر روی controller قرار میدهیم، تمام action ها در آن controller، از مسیریابی بر اساس attribute استفاده میکنند.

Attribute route ها، با محصور کردن یک token بین brace های مربعی ([, ]) از جایگزینی token پشتیبانی میکنند. توکن های [action][area], و [controller] با مقادیری از نام action، نام area و نام controller از action ای که route در آن تعریف شده است، جایگزین میشود:

اکشن متد ()List، مسیر Books/List URL/ و متد ()Edit، مسیر Books/Edit/{id}/ را تطبیق میدهد.

در این قسمت، ما نحوه تنظیم مسیریابی بر اساس Attribute را یاد گرفتیم. حالا نگاهی به تنظیم چند route به عنوان attribute بیندازیم.

مسیرهای چندگانه

مسیریابی بر اساس Attribute، تعریف چند route که به یک action منتهی میشود را پشتیبانی میکند. رایجترین مورد استفاده از این رویکرد، دستیابی به عملکرد route پیشفرض در مسیریابی قراردادی است:

با تعریف دو route، متد ()Index، مسیرهای Books/ و Books/Index/ را تطبیق داده و پوشش میدهد.

تمام. حالا چیزهایی که در این مقاله یاد گرفتیم را خلاصه میکنیم.

نتیجه گیری

در این مقاله، ما موضوعات زیر را یاد گرفتیم:

  • ایجاد یک الگوی مسیریابی قراردادی برای یک اپلیکیشن ASP.NET Core MVC
  • تنظیم مسیریابی بر اساس Attribute برای controller ها و action method ها
  • تنظیم چند route برای هر دو مسیریابی از نوع قراردادی و attribute 

در قسمت بعدی این سری از آموزش، ما آپلود فایل در ASP.NET Core MVC را بررسی میکنیم. پس با ما همراه باشید.

نویسنده

امید عباسی
من امید عباسی هستم. سالهاست که در زمینه برنامه نویسی با تکنولوژی دات نت فعالیت میکنم و عاشق این هستم که تجربیات و دانش خودم را در این زمینه با دیگران به اشتراک بزارم. خیلی دوست دارم که نظر و انتقاد خودتون رو در مورد این نوشته برای من بنویسید تا بتونم در آینده، مطالب بهتر و ارزشمندتری را برای شما فراهم کنم. در صورت داشتن هرگونه سوال هم در قسمت دیدگاه ها میتونید با بنده در ارتباط باشید