نیک آموز > وبلاگ > زبان های برنامه نویسی > مسیریابی در Razor Pages: از مفاهیم پایه تا پیاده‌سازی 
مسیریابی در Razor Pages: از مفاهیم پایه تا پیاده‌سازی 

مسیریابی در Razor Pages: از مفاهیم پایه تا پیاده‌سازی 

نوشته شده توسط: تیم فنی نیک آموز
تاریخ انتشار: ۰۴ آبان ۱۴۰۴
آخرین بروزرسانی: 05 آبان 1404
زمان مطالعه: 10 دقیقه
۰
(۰)

در وب مدرن، آدرس فقط یک متن در مرورگر نیست؛ آدرس در واقع همان چیزی است که باید مستقیماً به منطق درست در سمت سرور هدایت شود.  کاربر انتظار دارد چیزی شبیه /product/123 را وارد کند و فوراً مشخصات محصول ۱۲۳ را ببیند. اما داخل برنامه چه اتفاقی باید بیفتد؟ درخواست کاربر باید به صفحه درستی برسد، شناسه را بگیرد، از دیتابیس بخواند و خروجی مناسب را برگرداند. این مسئله همان جایی است که مسیریابی وارد بازی می‌شود.

مسیریابی در Razor Pages را می‌توان مثل سیستم پستی یک شهر بزرگ در نظر گرفت. برنامه وب مثل یک شهر است، پوشه‌های داخل Pages مثل محله‌ها هستند و هر Razor Page مثل یک خانه مشخص در آن محله است. URL همان آدرسی است که روی نامه نوشته شده و درخواست HTTP همان نامه است. نقش مسیریابی Razor Pages مثل پستچی است: وظیفه‌اش این است که هر آدرس را به صاحب درستش برساند. اگر آدرس به صورت /Cars/Details/5 نوشته شده باشد، سیستم باید بداند صفحه‌ی مربوط به جزئیات خودرو کجاست و مقدار ۵ یعنی کدام مورد. هدف Razor Pages این است که این اتصال بین «آدرس خوانا برای انسان» و «منطق واقعی برنامه» نه فقط انجام شود، بلکه قابل پیش‌بینی، تمیز و قابل نگهداری بماند.

مشکل اصلی در مسیریابی وب

در روزهای اولیه برنامه‌نویسی وب، هر URL مستقیماً به یک فایل فیزیکی روی سرور اشاره می‌کرد. اما با پیچیده‌تر شدن برنامه‌ها، این سؤال مطرح شد: 

چطور می‌توان بین آدرس‌های خوانا و زیبا برای کاربران و منطق پیچیده برنامه‌نویسی پشت صحنه ارتباط برقرار کرد؟ مشکل اینجا بود که کاربران آدرس‌هایی مثل `/product/123` را دوست دارند، در حالی که برنامه‌نویس نیاز دارد این درخواست به کدی برسد که بتواند محصول با شناسه ۱۲۳ را از دیتابیس بخواند و نمایش دهد. اینجا بود که مفهوم مسیریابی هوشمند (Intelligent Routing) متولد شد.

انالوژی یا مقایسه سیستم پستی یک شهر بزرگ

فرض کنید یک شهر بزرگ مثل تهران را در نظر بگیرید:

اجزای سیستم:

  1. شهر: برنامه وب شما
  2. محله‌ها: پوشه‌های داخل `Pages`
  3. خانه‌ها: فایل‌های Razor Pages (مثل `Details.cshtml`)
  4. نامه: درخواست HTTP کاربر
  5. آدرس روی نامه: URL وارد شده در مرورگر
  6. پستچی: سیستم مسیریابی Razor Pages

انالوژی یا مقایسه سیستم پستی یک شهر بزرگ



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



نحوه های مختلف مسیریابی:

۱. آدرس‌دهی استاندارد (قانون پیش‌فرض)

مثال:”تهران، محله اقدسیه، پلاک ۱۲۳”

در دنیای وب:

  • آدرس: `/Products/Details/123`
  • مسیر فایل:`Pages/Products/Details.cshtml`

توضیح: پستچی می‌داند مستقیماً به خانه “Details” در محله “Products” برود و شماره پلاک (۱۲۳) را به صاحب خانه تحویل دهد.

۲. آدرس‌دهی محله‌ای (صفحات Index)

مثال: “تهران، محله اقدسیه”

در دنیای وب:

  • آدرس: `/Products`
  • مسیر فایل:`Pages/Products/Index.cshtml`

توضیح: پستچی می‌داند اگر فقط نام محله ذکر شود، باید نامه را به خانه “اصلی” آن محله (Index) برساند.

۳. آدرس‌دهی سفارشی (مسیرهای دلخواه)

مثال: “تهران، فروشگاه مرکزی لوازم خانگی”

در دنیای وب:

  • آدرس: `/store/electronics`
  • مسیر فایل: `Pages/Products/Electronics.cshtml`

توضیح: گاهی می‌خواهید آدرس‌های کوتاه‌تر و جذاب‌تری داشته باشید.

مسیریابی در Razor Pages: حالت‌های مختلف

۱. حالت پیش‌فرض (Convention-Based Routing)

این ساده‌ترین و رایج‌ترین روش است. سیستم به طور خودکار ساختار پوشه‌ها را به URL تبدیل می‌کند.

مثال: سایت فروش خودروهای ایرانی

<!-- فایل: Pages/Cars/Domestic/Index.cshtml -->
@page
<h1>خودروهای داخلی ایران</h1>
<ul>
    <li>پراید - ۵۰ میلیون تومان</li>
    <li>پژو ۴۰۵ - ۸۰ میلیون تومان</li>
    <li>دنا - ۱۲۰ میلیون تومان</li>
</ul>

نتیجه ای که حاصل می شود :

  •  آدرس: `/Cars/Domestic`
  •  سیستم خودکار می‌فهمد باید `Pages/Cars/Domestic/Index.cshtml` را نمایش دهد

قوانین پیش‌فرض:

  •  `Index.cshtml` → نام پوشه والد
  •  `OtherFile.cshtml` → نام پوشه والد + نام فایل
  •  `Pages/Index.cshtml` → صفحه اصلی (`/`)

۲. مسیریابی با پارامترهای ساده

وقتی نیاز دارید اطلاعات متغیر از URL دریافت کنید.

مثال: صفحه جزئیات هر خودرو

<!-- فایل: Pages/Cars/Details.cshtml -->
@page "{id}"
<h1>جزئیات خودرو</h1>
@functions {
    public int CarId { get; set; }
    public string CarName { get; set; } = "";
    public void OnGet(int id)
    {
       CarId = id;
        // شبیه‌سازی دریافت اطلاعات از دیتابیس
        var cars = new Dictionary<int, string>
        {
            {۱, "پراید ۱۳۹۵"},
            {۲, "پژو ۴۰۵ صندوق دار"},
            {۳, "دنا پلاس"}
        };
        CarName = cars.ContainsKey(id) ? cars[id] : "خودرو یافت نشد";    }
}
<p>شناسه خودرو: @CarId</p>
<p>نام خودرو: @CarName</p>

 

آدرس‌های قابل دسترسی:

  • `/Cars/Details/1` → نمایش “پراید ۱۳۹۵”
  • /Cars/Details/2` → نمایش “پژو ۴۰۵ صندوق دار”
  • `/Cars/Details/3` → نمایش “دنا پلاس”

۳. مسیریابی با پارامترهای اختیاری

پارامترهایی که می‌توانند در URL داشته باشند یا نباشند.

مثال: صفحه جستجوی پیشرفته خودرو

<!-- فایل: Pages/Cars/Details.cshtml -->
@page "{id}"
<h1>جزئیات خودرو</h1>
@functions {
    public int CarId { get; set; }
    public string CarName { get; set; } = "";

    public void OnGet(int id)
    {
        CarId = id;
  
        // شبیه‌سازی دریافت اطلاعات از دیتابیس
        var cars = new Dictionary<int, string>
        {
            {۱, "پراید ۱۳۹۵"},

            {۲, "پژو ۴۰۵ صندوق دار"},

           {۳, "دنا پلاس"}
        };
        CarName = cars.ContainsKey(id) ? cars[id] : "خودرو یافت نشد";
    }
}
<p>شناسه خودرو: @CarId</p>
<p>نام خودرو: @CarName</p>

 

آدرس‌های معتبر مختلف:

  • `/Cars/Search` → جستجوی بدون فیلتر
  • `/Cars/Search/iran-khodro` → فقط برند ایران خودرو
  • `/Cars/Search/saipa/500000000` → برند سایپا + حداقل قیمت
  • `/Cars/Search/iran-khodro/300000000/800000000` → همه فیلترها

۴. مسیریابی با محدودیت‌ها (Route Constraints)

برای اعتبارسنجی خودکار پارامترها قبل از اجرای کد.

مثال: صفحه آمار فروش بر اساس سال

<!-- فایل: Pages/Cars/Details.cshtml -->
@page "{id}"
<h1>جزئیات خودرو</h1>
@functions {
    public int CarId { get; set; }
    public string CarName { get; set; } = ""; 
    public void OnGet(int id)
    {
        CarId = id;
        // شبیه‌سازی دریافت اطلاعات از دیتابیس
        var cars = new Dictionary<int, string>
        {
            {۱, "پراید ۱۳۹۵"},
            {۲, "پژو ۴۰۵ صندوق دار"},
            {۳, "دنا پلاس"}
        };

        CarName = cars.ContainsKey(id) ? cars[id] : "خودرو یافت نشد";
    }
}
<p>شناسه خودرو: @CarId</p>
<p>نام خودرو: @CarName</p>

 

انواع محدودیت‌های رایج:

  •  `{id:int}` → فقط اعداد صحیح
  •  `{id:min(1)}` → اعداد بزرگتر از ۱
  •  `{slug:alpha}` → فقط حروف انگلیسی
  •  `{date:datetime}` → فقط تاریخ معتبر

۵. مسیریابی کاملاً سفارشی

وقتی می‌خواهید کنترل کامل روی URL داشته باشید.

مثال: ایجاد آدرس‌های کوتاه و SEO-Friendly

<!-- فایل: Pages/Cars/Details.cshtml -->
@page "/car/{id}/{slug?}"
<h1>مشخصات فنی خودرو</h1>
@functions {
    public int CarId { get; set; }
    public string? Slug { get; set; }
 
    public void OnGet(int id, string? slug)
    {
        CarId = id;
        Slug = slug;
      
        // استفاده از slug برای SEO
        // اگر slug وجود نداشته باشد، از دیتابیس بخوانید
    }
}
@if (!string.IsNullOrEmpty(Slug))
{
    <p>آدرس SEO: @Slug</p>
}

 

آدرس‌های تولید شده:

  • `/car/123` → آدرس کوتاه
  • `/car/123/pride-1395` → آدرس کامل و بهینه برای سئو

 

مسیریابی در Razor Pages: حالت‌های مختلف

۶. مسیریابی چندگانه

یک صفحه با چندین آدرس مختلف.

مثال: صفحه درباره ما با آدرس‌های فارسی و انگلیسی

```html
<!-- فایل: Pages/About.cshtml -->
@page
@page "/درباره-ما"
@page "/about-us"
@page "/about"
<h1>درباره شرکت خودروسازی ایران</h1>
@functions {
    public void OnGet()
    {
        // کدهای مقداردهی اولیه
    }
}
<p>شرکت پیشرو در صنعت خودروسازی ایران</p>

 

همه این آدرس‌ها کار می‌کنند:

  • `/About`
  • `/درباره-ما`
  • `/about-us`
  • `/about`

۷. مسیریابی با هندلرهای مختلف

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

مثال: صفحه مدیریت خودروها

<!-- فایل: Pages/Cars/Manage.cshtml -->
@page
<h1>مدیریت خودروها</h1>
@functions {
    public List<string> Cars { get; set; } = new List<string>();

    // هندلر پیش‌فرض - نمایش لیست
    public void OnGet()
    {
        Cars = new List<string> {"پراید", "پژو", "دنا"};
    }
 
    // هندلر برای جستجو
    public void OnGetSearch(string query)
    {
        Cars = new List<string> {"پراید", "پژو", "دنا"}

               .Where(c => c.Contains(query)).ToList();
    }
  
    // هندلر برای حذف
    public IActionResult OnPostDelete(int carId)
    {
       // کد حذف از دیتابیس
        return RedirectToPage();    }
}
<!-- نمایش لیست خودروها -->
<ul>
    @foreach (var car in Cars)
    {
      <li>@car</li>
    }
</ul>
<!-- فرم جستجو -->
<form method="get">
    <input type="text" name="query" placeholder="جستجوی خودرو..." />
    <button type="submit">جستجو</button>
</form>
<!-- لینک جستجوی پیشرفته -->
<a href="/Cars/Manage/Search?query=پراید">جستجوی پراید</a>
```
---

 

نتیجه‌گیری:چه زمانی ازبهترین روش ها درعمل  استفاده کنیم ؟

  1. پیش‌فرض: برای اکثر صفحات عادی وب‌سایت
  2. پارامترهای ساده: برای صفحات جزئیات (محصولات، مقالات، کاربران)
  3. پارامترهای اختیاری: برای صفحات جستجو و فیلتر
  4. محدودیت‌ها: برای اعتبارسنجی داده‌های ورودی
  5. سفارشی: برای صفحات مهم و صفحات لندینگ
  6. چندگانه: برای پشتیبانی از چند زبان یا آدرس‌های جایگزین
  7. هندلرهای مختلف: برای صفحاتی که چندین عمل مختلف انجام می‌دهند

مثال نهایی: یک سایت فروش خودروی کامل

<!-- ساختار پیشنهادی -->
Pages/
├── Index.cshtml                    => /
├── About.cshtml                    => /About, /درباره-ما
├── Contact.cshtml                  => /Contact, /تماس-با-ما
├── Cars/
│   ├── Index.cshtml               => /Cars
│   ├── Search.cshtml              => /Cars/Search/{brand?}/{minPrice?}
│   ├── Domestic/
│   │   ├── Index.cshtml           => /Cars/Domestic
│   │   └── Details.cshtml         => /Cars/Domestic/{id}
│   ├── Foreign/
│   │   ├── Index.cshtml           => /Cars/Foreign
│   │   └── Details.cshtml         => /Cars/Foreign/{id}
│   └── Compare.cshtml             => /Cars/Compare/{id1}/{id2?}
└── Admin/
    ├── Index.cshtml               => /Admin
    ├── Cars/
    │   ├── Index.cshtml           => /Admin/Cars
    │   ├── Add.cshtml             => /Admin/Cars/Add
    │   └── Edit.cshtml            => /Admin/Cars/Edit/{id}
    └── Reports/
        ├── Sales.cshtml           => /Admin/Reports/Sales/{year:int}
        └── Inventory.cshtml       => /Admin/Reports/Inventory

 

سخن پایانی

مسیریابی در Razor Pages نمونه‌ای عالی از “Convention over Configuration” است. شما با یادگیری چند قانون ساده می‌توانید سیستم مسیریاری قدرتمندی ایجاد کنید که هم برای توسعه‌دهندگان قابل پیش‌بینی باشد و هم برای کاربران و موتورهای جستجو بهینه شده باشد.ازمزایای اصلی می توان به کاهش کدنویسی تکراری، ساختار URL تمیز و قابل فهم، پشتیبانی از سئو پیشرفته، انعطاف‌پذیری برای سناریوهای پیچیده،  یکپارچگی با اکوسیستم ASP.NET Core اشاره کرد.این سیستم به شما اجازه می‌دهد روی منطق کسب‌وکار تمرکز کنید، در حالی که مسیریابی هوشمند به طور خودکار ارتباط بین URLها و کدهای شما را مدیریت می‌کند.برای دسترسی به بهترین و جدیدترین دوره‌های آموزش ASP.NET Core، با نیک‌آموز همراه باشید.

 

چه رتبه ای می‌دهید؟

میانگین ۰ / ۵. از مجموع ۰

اولین نفر باش

title sign
دانلود مقاله
مسیریابی در Razor Pages: از مفاهیم پایه تا پیاده‌سازی 
فرمت PDF
12 صفحه
حجم 1 مگابایت
دانلود مقاله
آموزش معماری نرم افزار سطح پیشرفته
کلاس آموزش Power BI مقدماتی
title sign
معرفی نویسنده
تیم فنی نیک آموز
مقالات
412 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
تیم فنی نیک آموز
title sign
معرفی محصول
title sign
دیدگاه کاربران