• ASP.NET Core 1 – قسمت دوازدهم
ASP.NET Core 1 – قسمت دوازدهم
1395/01/28 - 22:52:39 // MVC 5 & 6 // 0 نظر // 4241 بازدید

در قسمتهای قبلی از طریق تنظیمات Middle Ware مشخص کردیم هر درخواست چکونه بررسی شده و اصلن یک درخواست باید به سراغ Controller برود یا نه . بهترین راه ایجاد تنظیمات Routing در Middle Ware و همان فایل Startup.cs میباشد .

بسمه تعالی

ASP.NET Core 1 قسمت دوازدهم

در قسمتهای قبلی از طریق تنظیمات Middle Ware مشخص کردیم هر درخواست چکونه بررسی شده و اصلن یک درخواست باید به سراغ Controller برود یا نه . بهترین راه ایجاد تنظیمات Routing در Middle Ware و همان فایل Startup.cs میباشد . اینگونه است که میتوان آدرسها را مدیریت کرده و وضعیت پاسخگویی به Request ها را در اختیار برنامه نویس قرار داد.

یکی از راههای رایج استفاده از Template در Routing میباشد . اینگونه است که بر اساس Controller Name و پارامترهای درخواست میتوان تصمیم گیری نمود . اصولن Controller یک کلاس C# است و Action نام یک متد درون آن . به یک نمونه از این Template در تصویر زیر اشاره شده است .

 

نوع دیگر Routing در MVC را Attribute Routing می نامند . در این روش باید یک Attribute برای هم Action Method ایجاد کرده و از طریق آن مسیر بابی را دنبال نمود .

 

تصویر بالا یک نمونه از Attribute Routing را نشان میدهد . حال باید هر دو روش را به صورت عملی بررسی و نتیجه را مشاهده کنیم .

در قسمتهای قبلی یک Controller ساخته بودیم . این روند توسط دستور UseMvcWithDefaultRoute درون فایل Startup.cs و در عمل به عنوان یک Middle Ware از لحاظ Routing پیاده سازی گردید.

حال بهتره اندکی با ریزه کاری بیشتر عمل کنیم . به جای دستور UseMvcDefaultRoute از دستور UseMvc استفاده میکنیم . این متد یک ورودی ConfigureRoute خواهد داشت که برای آن از طریق Intellisense یک متد ساخته خواهد شد . وضعیت تا به اینجا به این شکل خواهد بود .

 

این متد ایجاد شده یک پارامتر ورودی از IRouteBuilder Interface دارد که نام متغیر آنرا از Obj به routeBuilder تغییر خواهم داد . باز تکرار میکنیم که وظیفه Routing بررسی HTTP Request ها و تصمیم گیری برای اجرای کدام متد از کدام Controller خواهد بود . حال ممکن است در شرایطی شما فقط Route نیاز داشته باشید و کل پروزه را بتوانید با آن مدیریت کنید و در شرایطی ممکن است به صدها Route مختلف نیاز پیدا کنید و از همه آنها هم استفاده نمایید .

خوب حال برای ایجاد تنظیمات Routing اجازه دهید وضعیت Home/Index را فرض کنیم . در چنین شرایطی باید درون متد ConfigureRoute یک Template برای این مدل Route مانند زیر تعریف کنیم . چون امکان داشتن پارامتر هم هست ، یک Optional Parameter هم در Route Template ایجاد میکنیم.

 

همانطور که مشاهده میکنید Controller در ابتدای این Template و Action Name و پارامتر در Segment های بعدی ذکر شده اند .

اگر الان فایل را به درستی Save و پروژه را اجرا کنید ، همان پیام Greeting که در فایل Json داشتیم نمایش داده شده و متد درون Controller اجرا نخواهد شد ، چرا که Routing آدرس و URL مورد نظر ما یعنی /Home/Index را در Address Bar ندیده است . حال اگر این URL را وارد کنید ، پیام درون متد Index را خواهید گرفت ،ولی اگر بخواهم مسیر Home/Index را به صورت مسیر پیش فرض داشته و هر جا آدرسی ذکر نشد آنرا به صورت پیش فرض داشته باشم ، باید به شکل زیر عمل کنم .

 

حالا اگر پروژه را اجرا کنید ، خواهید دید که بدون وارد کردن /Home/Index هم همین مسیر به صورت پیش فرض برای پروزه تعریف شده و متد Index اجرا خواهد شد . حال حتی اگر فقط /Home را هم وارد کنید ، باز هم به صورت پیش فرض متد Index آن اجرا خواهد شد .

تا اینجا فقط یک Controller داشته ایم و همه چیز بر روی آن اجرا میشده است . الان وقت آن است که یک Controller دیگر هم ایجاد کنیم و روند کارکرد Routing را ضمن داشتم بیش از یک Controller بررسی کنیم.

یک Controller جدید به نام About با دو Action Method مختلف خواهم ساخت .

 

خوب الان با اجرای پروژه و استفاده از URL مناسب میتوان این متدها را اجرا نمود . مثلن /About/Phone به من شماره تلفن درون Action Method را نمایش خواهد داد و این نشان میدهد که Routing برای همه Controller هایی که متدهای مشابه Template تعریف شده داشته باشند ، کار خواهد کرد.

خوب حالا نتیجه وارد کردن فقط /About چه خواهد بود ؟. باز هم همان پیام درون Greeting را که در App.Run وجود دارد خواهم گرفت ، چرا که برای این شکل از URL هیچگونه Template خاصی در Routing تعریف نشده و فقط برای HomeController به صورت Default به دنبال اجرای Index خواهد رفت ، ضمن اینکه اصلن در AboutController متدی به نام Index اصلن نداریم.

شما می توانید در صورت نیاز Route های بیشتری اضافه کرده و از آنها استفاده کنید . روشی که مورد بررسی قرار گرفت Conventional Routing نام دارد . در قسمت بعدی به سراغ Attribute Routing رفته و از آن استفاده خواهیم نمود .

موفق باشید .

علی کلاهدوزان
معرفی نویسنده : علی کلاهدوزان

سلام بر دوستان ،
شاید رایج است به عنوان پروفایل کاربر ، چند خطی راجع به خودم بنویسم ، ولی وضعیت کاری و سوابق من با یک جستجوی ساده در گوگل مشخص خواهد شد ، لذا سرتان را با مطالب بی مورد به درد نیاورم بهتر است . اگر نکته خاصی لازم بود بدانید در قسمت "ایلیا سافت در یک نگاه" به احتمال زیاد یافت خواهد شد . جزئیات بیشتر را سوال کنید ، آدرس ایمیل Ali@Kolahdoozan.com همیشه جوابگوی شماست .امیدوارم از مطالب سایت استفاده کرده باشید . شاد و پیروز باشید .

امتیاز به مطلب
           
نظرات کاربران
ارسال نظر