نیک آموز > وبلاگ > زبان های برنامه نویسی > مسیریابی در Razor Pages: از مفاهیم پایه تا پیادهسازی مسیریابی در Razor Pages: از مفاهیم پایه تا پیادهسازی زبان های برنامه نویسی نوشته شده توسط: تیم فنی نیک آموز تاریخ انتشار: ۰۴ آبان ۱۴۰۴ آخرین بروزرسانی: 04 آبان 1404 زمان مطالعه: دقیقه ۰ (۰) در وب مدرن، آدرس فقط یک متن در مرورگر نیست؛ آدرس در واقع همان چیزی است که باید مستقیماً به منطق درست در سمت سرور هدایت شود. دراین مقاله از نیک آموز کاربر انتظار دارد چیزی شبیه /product/123 را وارد کند و فوراً مشخصات محصول ۱۲۳ را ببیند. اما داخل برنامه چه اتفاقی باید بیفتد؟ درخواست کاربر باید به صفحه درستی برسد، شناسه را بگیرد، از دیتابیس بخواند و خروجی مناسب را برگرداند. این مسئله همان جایی است که مسیریابی وارد بازی میشود. مسیریابی در Razor Pages را میتوان مثل سیستم پستی یک شهر بزرگ در نظر گرفت. برنامه وب مثل یک شهر است، پوشههای داخل Pages مثل محلهها هستند و هر Razor Page مثل یک خانه مشخص در آن محله است. URL همان آدرسی است که روی نامه نوشته شده و درخواست HTTP همان نامه است. نقش مسیریابی Razor Pages مثل پستچی است: وظیفهاش این است که هر آدرس را به صاحب درستش برساند. اگر آدرس به صورت /Cars/Details/5 نوشته شده باشد، سیستم باید بداند صفحهی مربوط به جزئیات خودرو کجاست و مقدار ۵ یعنی کدام مورد. هدف Razor Pages این است که این اتصال بین «آدرس خوانا برای انسان» و «منطق واقعی برنامه» نه فقط انجام شود، بلکه قابل پیشبینی، تمیز و قابل نگهداری بماند. مشکل اصلی در مسیریابی وب در روزهای اولیه برنامهنویسی وب، هر URL مستقیماً به یک فایل فیزیکی روی سرور اشاره میکرد. اما با پیچیدهتر شدن برنامهها، این سؤال مطرح شد: چطور میتوان بین آدرسهای خوانا و زیبا برای کاربران و منطق پیچیده برنامهنویسی پشت صحنه ارتباط برقرار کرد؟ مشکل اینجا بود که کاربران آدرسهایی مثل `/product/123` را دوست دارند، در حالی که برنامهنویس نیاز دارد این درخواست به کدی برسد که بتواند محصول با شناسه ۱۲۳ را از دیتابیس بخواند و نمایش دهد. اینجا بود که مفهوم مسیریابی هوشمند (Intelligent Routing) متولد شد. انالوژی یا مقایسه سیستم پستی یک شهر بزرگ فرض کنید یک شهر بزرگ مثل تهران را در نظر بگیرید: اجزای سیستم: شهر: برنامه وب شما محلهها: پوشههای داخل `Pages` خانهها: فایلهای Razor Pages (مثل `Details.cshtml`) نامه: درخواست HTTP کاربر آدرس روی نامه: URL وارد شده در مرورگر پستچی: سیستم مسیریابی Razor Pages نحوه های مختلف مسیریابی: ۱. آدرسدهی استاندارد (قانون پیشفرض) مثال:”تهران، محله اقدسیه، پلاک ۱۲۳” در دنیای وب: آدرس: `/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 تبدیل میکند. مثال: سایت فروش خودروهای ایرانی جدیدترین آموزش ASP .NET Core <!-- فایل: 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` → آدرس کامل و بهینه برای سئو ۶. مسیریابی چندگانه یک صفحه با چندین آدرس مختلف. مثال: صفحه درباره ما با آدرسهای فارسی و انگلیسی ```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> ``` --- نتیجهگیری: بهترین روشها در عمل چه زمانی از هر روش استفاده کنیم؟ پیشفرض: برای اکثر صفحات عادی وبسایت پارامترهای ساده: برای صفحات جزئیات (محصولات، مقالات، کاربران) پارامترهای اختیاری: برای صفحات جستجو و فیلتر محدودیتها: برای اعتبارسنجی دادههای ورودی سفارشی: برای صفحات مهم و صفحات لندینگ چندگانه: برای پشتیبانی از چند زبان یا آدرسهای جایگزین هندلرهای مختلف: برای صفحاتی که چندین عمل مختلف انجام میدهند مثال نهایی: یک سایت فروش خودروی کامل <!-- ساختار پیشنهادی --> 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ها و کدهای شما را مدیریت میکند. چه رتبه ای میدهید؟ میانگین ۰ / ۵. از مجموع ۰ اولین نفر باش دانلود مقاله مسیریابی در Razor Pages: از مفاهیم پایه تا پیادهسازی فرمت PDF صفحه حجم مگابایت دانلود مقاله معرفی نویسنده مقالات 412 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده تیم فنی نیک آموز معرفی محصول مقالات مرتبط ۱۰ خرداد زبان های برنامه نویسی Lifecycle اپلیکیشن در ۹ ASP.NET Core؛ از Request تا Response محمدامین نجفی ۱۳ اردیبهشت زبان های برنامه نویسی Middleware نویسی در ASP.NET Core: راهنمای پیشرفته برای توسعهدهندگان حرفهای تیم فنی نیک آموز ۲۱ اسفند زبان های برنامه نویسی شرح repository pattern در #C | معرفی جامع + نحوه ساخت تیم فنی نیک آموز ۱۲ اسفند زبان های برنامه نویسی تزریق وابستگی در asp.net core | بررسی اصول و بهترین روشها تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ