سئو

بررسی Routing یا مسیریابی در ASP.NET Core 2.0 و ASP.NET Core 3.0

سلام ، من آرزو ابراهیمی هستم طراح سایت آموزش asp.net core mvc ، می خواهم در مورد مبحث مهم Routing در ASP.NET Core با شما صحبت کنم، پس با من همراه باشید.

سرفصل‌های پست

Routing با مسیریابی در ASP.NET Core MVC چیست ؟

به زبان خیلی ساده ، Routing قانونی است که مشخص می‌کند یک درخواست به چه کنترلر و چه اکشن متدی فرستاده شود. فرض کنید که شما می‌خواهید با وسیله نقلیه خود به شهر ورامین در استان تهران بروید برای رفتن به شهر ورامین شما نیاز به یک نقشه‌ی راه دارید تا از طریق نقشه متوجه بشید که از طریق چه مسیرهایی می‌توانید به مقصد خود برسید در پروژه های ASP.NET Core به این نقشه راه ، Routing گفته می‌شود پس Routing نقشه راه یک درخواست است.

تنظیمات Routing در پروژه های ASP.NET Core

شما از هر نسخه ی .NET Core را مطالعه کنید.

تنطیمات Routing در پروژه های ASP.NET Core 3.0

خب فایل Startup.cs را باز کنید و برید سراغ متد Configure ، پیکربندی Routing در این متد صورت می‌گیرد. حالا در کلاس Startup به دنبال کدی که در تصویر زیر مشاهده می‌کنید‌ بگردید.

routing in asp net core 3

همانطور که در تصویر بالا مشاهده می‌کنید تنظیمات Routing در ASP.NET Core 3.0 با استفاده از متد UserEndpoints صورت میگیرد. حالا بعد از فراخوانی این متد و راه اندازی میان افزار Endpoints می‌توانیم با متدهایی نظیر MapControllerRoute و یا MapRazorPages ، مسیرها یا Route ها را پیکربندی کنیم.

بررسی متد MapControllerRoute

اگر از معماری MVC در پروژه‌ی خود استفاده می‌کنید برای پیکربندی مسیرها ، از متد MapControllerRoute استفاده کنید ، سپس پارامترهای name و pattern را مقداردهی کنید. نام مسیر یا Route را به عنوان مقدار پارامتر name قرار دهید در تصویر بالا نام مسیر ، default قرار داده شده است ولی شما می‌توانید هر نام دلخواهی که دوست دارید برای Route یا مسیر قرار دهید. با استفاده از پارامتر pattern هم می‌توانید الگوی مسیر را مشخص کنید ، به تصویر بالا دقت کنید همین طور که مشاهده می کنید پارامتر pattern به صورت زیر مقداردهی شده است :

حالا این سوال پیش آید که الگوی تعریف شده در بالا چه معنی و مفهومی دارد؟ همین طور که مشاهده می‌کنید pattern شامل سه بخش هست که با علامت / (اسلش) از هم جدا شده اند.

بخش اول {controller=Home} مشخص می‌کند که بعد از آدرس سایت مثلا https://mizfa.com/ هر مقداری که قرار بگیرید مشخص کننده نام کنترلر است . پس اگر به عنوان مثال آدرس به صورت https://mizfa.com/Home بود این آدرس مشخص می‌کند که درخواست باید به سمت کنترلر Home ارسال شود.

همانطور که در الگوی بالا مشاهده می‌کنید در بخش اول ، مقدار controller برابر Home قرار گرفته است خب به نظرتون چرا اینکار انجام شده ؟ آیا حتما باید در الگوی مسیر ، controller رو مقداردهی کنیم ؟

در پاسخ باید بگم که خیر ، مقداردهی controller در الگوی مسیر مستحب است و واجب نیست ولی شما می‌توانید یک مقدار پیش فرض را برای controller تعریف کنید تا اگر در آدرسی نام کنترلر وارد نشده بود به صورت پیش فرض کنترلی که در الگو مشخص شده است و به عنوان مقدار controller قرار گرفته است اجرا شود در الگوی فوق مقدار پیش فرض controller برابر Home قرار داده شده پس چنانچه در یک آدرس نام کنترلر مشخص نبود به صورت پیش فرض درخواست به سمت کنترلر Home ارسال می‌شود.

بخش دوم {action=Index} مشخص می کند که درخواست به چه اکشن متدی ارسال شود به عنوان مثال اگر کاربر آدرس https://mizfa.com/Products/Details را در مرورگر وارد کند ، یک درخواست به کنترلر Products و اکشن متد Details ارسال می‌شود. پس طبق الگوی فوق ، بخش اول بعد از آدرس سایت مشخص کننده نام کنترلر هست و بخش دوم بعد از نام کنترلر و اسلش مشخص کننده نام Action Method هست.

همین طور که درالگوی فوق مشاهده می‌کنید مقدار پیش فرض action برابر Index قرارداده شده است ، و این بدین معناست که اگر آدرس شامل نام اکشن متد نبود به صورت پیش فرض اکشن متد Index اجرا شود و درخواست به سمت این Action Method ارسال شود.

حالا فرض کنید که کاربر آدرس https://mizfa.com را وارد می‌کند در این آدرس بخش اول و دوم را نداریم پس به صورت پیشفرض درخواست به اکشن متد Index که درون کنترلر Home قرارگرفته است ارسال می‌شود.

بخش سوم {id?} مشخص کننده پارامتری هست که به اکشن متد ارسال می‌شود ، اگر نام پارامتر اکشن متد id باشد می توانیم در آدرس بعد از نام اکشن متد و علامت / (اسلش) بلافاصله مقدار پارامتر id را ارسال کنیم.

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

به عنوان مثال اگر کاربر آدرس https://mizfa.com/Products/Details/3 را در مرورگر وارد کند و enter را بزند ، یک درخواست به سمت اکشن متد Details که در کنترلر Products تعریف شده ارسال می‌شود و مقدار 3 هم به عنوان مقدار پارامتر id اکشن متد Details قرار می‌گیرد.

حالا این سوال پیش میاد چرا از علامت ? بعد از id استفاده شده است ؟

در پاسخ به این سوال باید بگویم که علامت ؟ اختیاری بودن بخش سوم را مشخص می‌کند یعنی واجب نیست که حتما این بخش سوم که ارسال پارامتر به اکشن متد هست وجود داشته باشید. پس علامت ؟ به معنای مستحب بودن است

به جدول زیر دقت کنید همه آدرس های موجود در این جدول از الگوی {controller=Home}/{action=Index}/{id?} پیروی می‌کنند.

توضیحات
آدرس

طبق الگوی بالا ، اکشن متد Index در کنترلر Home اجرا می شود.
https://mizfa.com

طبق الگوی بالا ، اکشن متد Index در کنترلر Home اجرا می شود. چون نام اکشن متد وارد نشده طبق الگو ، اکشن متد Index اجرا می‌شود.
https://mizfa.com/Home

طبق الگوی بالا ، اکشن متد Details در کنترلر Products اجرا می‌شود.
https://mizfa.com/Products/Details

طبق الگوی بالا ، اکشن متد Details در کنترلر Products اجرا می‌شود. و مقدار 5 به عنوان مقدار پارامتر id اکشن متد Details به آن ارسال می‌شود.
https://mizfa.com/Products/Details/5

بررسی متد MapRazorPages

اگر در پروژه تان می خواهید از Razor Page ها استفاده کنید برای پیکربندی Routing یا مسیریابی برای Razor Page لازم هست که متد MapRazorPages را فراخوانی کنید.

تنطیمات Routing (مسیریابی) در پروژه های ASP.NET Core 2.0

در پروژه های ASP.NET Core 2.0 هم تنظیمات Routing در کلاس Startup صورت می‌گیرد، پس فایل Startup.cs را باز کنید و به دنبال متد Configure بگردید. حالا به تصویر زیر دقت کنید و کد زیر را در متد Configure پیدا کنید.

routing in asp net core 2

در ASP.NET Core 2.0 ، برای انجام تنظیمات Routing باید متد UseMvc را فراخوانی کنیم حالا برای تعریف کردن Route ها از متد MapRoute استفاده می‌کنیم سپس باید پارامترهای name و template را مقداردهی کنیم.

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

4.3
/
5
(
6

امتیاز

)

ادامه مطلب

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