همانطور که پیش از این گفتیم، مسیریابی مسئول نگاشت دادن یک درخواست ورودی از طریق نشانی URL به یک کلاس کنترل گر است. مسیرها باید در برنامه شناسانده (تعریف) شده و سپس در زمان راه اندازی پروژه، همه آنها رجیستر می شوند. پس از این مولفه Route Handler می تواند از میان این الگوهای مسیر، تطابقی با درخواست ورودی پیدا کند.

مسیر چیست

یک مسیر (Route) اساسا یک الگوی است که در کنار نام کلاس کنترل گر و نام متد کنترل گر (Action Method) به یک نشانی URL نگاشت داده می شود و از سوی دیگر، از یک مسیر می توان مقدارهایی را از نشانی URL مانند رشته کوئری (Query String) بدست آورد. سپس این مقدارهای بدست آمده درون برنامه برای پردازش درخواست به کار گرفته می شوند.

خط زیر الگوی مسیرها در ASP.NET Core MVC را نشان می دهد که از نام کنترل گر (Controller)، متد کنترل گر (Action) و یک یا چندین شناسه اختیاری (Id) ساخته شده است. در خط زیر نام کنترل گر Home و نام متد کنترل گر Index است. یک نکته بسیار مهم آن است که پروتکل HTTP از گونه های درخواست های گوناگون پشتیبانی می کند که GET و POST دو شیوه برجسته هستند. زمانی که نشانی را در مرورگر می نویسید، درخواستی از گونه GET به سرور فرستاده می شود.

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

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

ساخت URL از روی الگو های مسیر

الگو یک قاعده است که چگونگی اداره کردن یک درخواست را نشان می دهد و این الگو از نام کنترل گر، متد کنترل گر و شاید یک یا چندین پارامتر ورودی برای متد کنترل ساخته می شود. برا نمونه فرض کنید که کاربر نشانی زیر را وارد می کند، پس درخواستی آماده و فرستاده می شود. اکنون باید بدانیم ASP.NET Core MVC چگونه این آدرس را به یک مسیر نگاشت می دهد. اگر نام (و شماره درگاه – پورت) را در نظر نگیریم، بر پایه الگو، نام کنترل گر User و نام متد کنترل گر Index است.

توجه کنید که بر پایه نوشته  درباره کلاس کنترل گرها، در این نشانی user به کلاس کنترل گری به نام UserController نگاشت داده می شود که دارای یک متد به نام ()Index است. حال فرض کنید می خواهیم داده های یک کاربر ویژه را نشان دهم پس نخست در کلاس کنترل گر باید یک متد تازه برای نمونه به نام ()Profile نوشته شود و همچنین باید یک پارامتر که شناسه کاربر است نیز باید در نشانی URL نوشته شود.

از نشانی بالا آشکار است که متد ()Profile از کلاس UserController یک ورودی که شناسه کاربر است را از نشانی URL دریافت می کند و سپس آن را درون یک پرس و جوی SQL به پایگاه داده می فرستد تا داده های آن کاربر از پایگاه داده بدست بیایند. در همین جا دو چیز هست، نخست آنکه این روش درخواست چون از راه نشانی URL (و نه از فرم اچ تی ام ال) است، پس درخواست GET است و دومین آن است که توانستیم از نشانی یک سری داده به سرور بفرستیم و سپس در متد کلاس کنترل گر از این داده ها برای پردازش درخواست و ارتباط با مدل کمک گرفته شده و سپس پاسخی آماده و در پایان به نما فرستاده شود.

زمانی که پروژه ASP.NET Core MVC می سازید یک کلاس کنترل گر به نام HomeContrller در پوشه Controllers ساخته می شود که دارای دو متد به نام ()Index و ()Privacy است. اینکه این دو متد پیش فرض چه می کنند، برای نوشته پیش رو خواهد بود ولی در واقع با توجه به نام کنترل گر و متدهای آن تا بدین جا ما دو الگو مسیر Home/Index/ و Home/Privacy/ داریم که با چسباندن آنها به نام دامنه، دو نشانی زیر ساخته می شوند.

به یاد داشته باشید در الگو مسیری که متد ()Index دارد، نوشتن نام آن در نشانی URL اجباری نیست و از این در آدرس https://mydomain.com/home/index اگر index نیز نوشته نشود، نشانی https://mydomain.com/home نیز شناخته شده است. شناخته بودن یعنی بتوان یک URL را به یک مسیر نگاشت داد و اگر نگاشتی نتواند صورت گیرد، پس خطای ۴۰۴ برگشت داده می شود که در نوشته  اداره کردن خطاها در ASP.NET Core MVCدرباره میان افزار ()UseHttpStatusCode گفتیم.

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

  • مسیریابی در مدل MVC برای این است تا یک درخواست ورودی از نشانی URL به یک کلاس کنترل گر و متدی از آن نگاشت داده شود.
  • می تواند یک الگوی مسیر برای دو یا همه درخواست های HTTP مانند GET و POST باشد ولی برای هر درخواست یک متد کنترل گر جدا هست که درخواست ها را جدا از دیگری پردازش می کند.
  • الگوی مسیر به ترتیب شامل نام کنترل گر، نام متد کنترل و شاید یک یا چندین پارامتر ورودی برای متد کنترل گر باشد.
  • داشتن پارامترهای ورودی اجباری نیست و لی به هر حال یک یا چندین پارامتر ورودی که پس از نام متد کنترل گر و با کاراکتر / از یکدیگر جدا می شوند، به ترتیب ورودی های متد کنترل گر هستند.
  • زمانی که پس از نام متد کنترل گر یک یا چند پارامتر نشان داده می شود، پس این پارامترها ورودی های متد کنترل گر هستند.
  • مسیریابی در ASP.NET Core MVC برای ساخت URL ها به کار می رود و در وارونه آن، یک URL به یک مسیر نگاشت داده می شود.

مفهوم مسیریابی نقطه پایانی

در ASP.NET Core MVC 3 یک تغییر در کلاس Startup (کلاس همنام در فایل Startup.cs) رخ داده است که افزوده شدن یک میان افزار به نام ()UseRouting به متد ()Configure است. کد زیر متد ()Configutre را نشان می دهد و می توانید متد ()UseRouting را ببینید که پس از متد میان افزار دیگری به نام ()UseStaticFiles آمده است. به یاد داشته باشید اگر قرار است میان افزار ()UseStaticFiles را به کار ببریم، پس باید ()UseStaticFiles پیش از ()UseRouting نوشته شود. همچنین بر اساس کد زیر یک میان افزار دیگر به نام ()UseAuthorization پس از ()UseRouting نوشته شده است و شما نیز باید این ترتیب را رعایت کنید.

تنظیم الگو یا قاعده پیشفرض مسیریابی

در ASP.NET Core MVC 3 یکی از تغییرها، جایگزیتی ()UseEndpoints به جای ()UseMvc است. کد زیر بخش دیگری از متد ()Configure کلاس Startup را نشان می دهد. در واقع قطعه کد زیر از متد ()Configure، الگو پیش فرض مسیریابی Controller/Action/Id را مشخص می کند.

کد زیر پیکربندی الگو مسیریابی پیش فرض در ASP.NET Core MVC 2.x را نشان می دهد که در آن ()UseMvc استفاده شده است. توجه کنید در الگو مسیریابی چون عملگر ? پایان پارامتر Id آمده است، پس آن اختیاری است. پارامتر Id می تواند شامل صفر یا یک یا چندین باشد که به عنوان ورودی های متد کنترل گر (Action Method) هستند. شاید متدی در کلاس کنترل گر باشد که ورودی نداشته باشد، پس از این Id اختیاری پیکربندی شده است.