مسیریابی Attribute در ASP.NET Core – جلسه ۲۶

Attribute Routing - Session26

در این جلسه از آموزش ASP.NET Core به بررسی مسیریابی Attribute خواهیم پرداخت. به طور کلی دو نوع مسیریابی برای ASP.NET Core وجود دارد که شامل Conventional Routing و Attribute Routing میباشد. ما در جلسه دوازدهم، مبحث Conventional Routing را با جزئیات کامل مورد بحث قرار داده‌ایم. نوع مسیریابی مورد بحث این جلسه برای استفاده در WEB API مناسب میباشد و مسیریابی در آن با استفاده از نشان (Attribute) صورت میگیرد. نشان ها را میتوان برای هر Action Method و یا Controller اعمال کرد.

مسیریابی Attribute چیست؟

یکی از روشهای مسیریابی ASP.NET Core میباشد که برای استفاده در WEB API مناسب میباشد. در این روش همانگونه که از نام آن مشخص است از Attribute برای مسیر دهی استفاده میشود. Attribute ها میتوانند در سطح Action Method و یا Controller اعمال گردند.

پیاده سازی Attribute Routing

برای پیاده سازی مسیریابی Attribute ابتدا میبایست در میان‌‌افزار UseEndpoints در متد Configure از کلاس Startup تغییراتی اعمال کنیم. همانگونه که در جلسه دوازدهم شرح دادیم برای Conventional Routing از روش‌های زیر استفاده میکنیم.

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();

-----------------> OR <-----------------

                endpoints.MapControllerRoute(
                        name: "default",
                        pattern: "{controller=Home}/{action=Index}/{id?}");
            });

ولی برای مسیریابی Attribute ابتدا قطعه کد زیر را جایگزین قطعه کد فوق میکنیم.

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

سپس در Controller و Action Method های خود میتوانیم از نشان Route برای مسیردهی به Controller و Action Method استفاده نماییم. مسیردهی میتواند در سطح Action Method باشد.

        [Route("")]
        [Route("Home/Index")]
        [Route("Home")]
        public ViewResult Index()
        {
            return View();
        }

همچنین مسیریابی میتواند در سطح کنترلر و Action Method اعمال گردد.

    [Route("Home")]
    public class HomeController : Controller
    {
        private readonly ICostRepository repository;

        public HomeController(ICostRepository _repository)
        {
            repository = _repository;
        }
        [Route("")]
        [Route("Index")]
        [Route("~/")]
        public ViewResult Index()
        {
            return View();
        }

ضمنا میتوان به جای استفاده از نام‌های ثابت، برای Controller و Action Method های خود از توکن [“controller”] برای نام Controller و توکن [“action”] برای نام Action Method استفاده نمود. در صورت استفاده از این توکن‌ها مسیر اجرای هر Action Method مانند مسیریابی Conventional معادل نام Controller و Action Method خواهد بود. در حالی که در صورت استفاده از نام‌های ثابت به جای توکن، دیگر نام Controller و Action Method نقشی در مسیریابی نخواهند داشت.

    [Route("[controller]")]
    public class HomeController : Controller
    {
        private readonly ICostRepository repository;

        public HomeController(ICostRepository _repository)
        {
            repository = _repository;
        }
        [Route("")]
        [Route("[action]")]
        [Route("~/")]
        public ViewResult Index()
        {
            return View();
        }

همچنین برای پارامترهای ورودی میتوان از [Route(“{id}”)] استفاده نمود و برای اختیاری نمودن پارامتر ورودی از علامت سوال استفاده نمود [Route(“{id?}”)] .

    [Route("[Controller]/[action]")]
    public class CostController : Controller
    {
        private readonly ICostRepository costRepository;

        public CostController(ICostRepository _costRepository)
        {
            costRepository = _costRepository;
        }
        [Route("{id?}")]
        public IActionResult Detail(int? id)
        {
            CostDetailViewModel model = new CostDetailViewModel
            {
                CostData = costRepository.GetCostByID(id??1),
                PageTitle = "Cost Detail"
            };
            return View(model);
        }
        public IActionResult List()
        {
            var model = costRepository.GetAllCost();
            return View(model);
        }

در صورتی که بخواهیم پارامتر ورودی Action Method خود را غیر الزامی کنیم، میتوان از علامت سوال در انتهای نوع پارامتر ورودی استفاده کرد. public IActionResult Detail(int? id) . البته این قابلیت بروی تمامی انوع قابل اجرا نمی ‌باشد. به عنوان مثال بر روی string امکان استفاده از این قابلیت وجود ندارد.

CostData = costRepository.GetCostByID(id??1) استفاده از دو علامت سوال بعد از id به این معنا میباشد که در صورت تهی بودن id مقدار پیشفرض عدد 1 خواهد بود.

در صورت نیاز به جزئیات بیشتر، میتوانید ویدئو آموزشی این جلسه را تماشا نمایید. همچنین برای آگاهی از جلسات بعدی این دوره آموزشی، ما را در اینستاگرام، تلگرام، یوتیوب و آپارات دنبال کنید. همچنین لیست کامل جلسات در این قسمت در دسترس شما میباشد.

تماشای ویدیو در یوتیوب ما

دانلود اسلایدهای آموزشی این جلسه از اینجا

برچسب ها

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
0
افکار شما را دوست داریم، لطفا نظر دهید.x