آموزش کار با سیستم مسیردهی Routing در ASP.Net MVC
به طور کلی، مسیردهی یا Routing د ASP.Net MVC به عملیات اتصال یک درخواست HTTP Request به کنترلر Controller مناسب آن گفته می شود.
دستورات و کدهای لازم جهت سیستم مسیردهی Routing در اسمبلی System.Web.Routing تعریف شده است.
راهنمایی :
درواقع اسمبلی System.Web.Routing بخشی از ASP.Net MVC نیست. این اسمبلی بخشی از سیستم ASP.Net Runtime بوده که همزمان با .NET ورژن 3.5 ارائه شده است.
نکته :
اسمبلی System.Web.Routing هم توسط چهارچوب کاری MVC و هم توسط فریم ورک ASP.Net Dynamic Data استفاده می شود.
تنظیمات مربوط به سیستم مسیردهی Routing پروژه، درون فایل Global.asax هماند کد فایل زیر تعریف می شود. این فایل همزمان با ساخت یک پروژه جدید MVC در پوشه اصلی سایت، ایجاد می شود :
| syntax |
| کد |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVCFirstApp {
public class MvcApplication : System.Web.HttpApplication {
protected void Application_Start(){
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
|
نکته مهم :
چهارچوب کاری MVC، از اطلاعات سیستم مسیردهی یا Routing برای انتقال هر درخواست Request به کنترلر Controller متناسب آن، استفاده می کند. تمامی مسیرهای درون برنامه را بایستی با فرمت مورد نظر، درون فایل RouteConfig.cs درون پوشه App_Start به صورت زیر تعریف کنید. هر پروژه MVC، دارای یک مسیر پیش فرض یا default اولیه است، که نحوه مسیردهی کلی را مشخص می کند.
| syntax |
| کد |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVCFirstApp {
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new{ controller = "Home", action = "Index", id = UrlParameter.Optional});
}
}
}
|
در فایل RouteConfig.cs تمامی مسیرهای مورد نظر خود را با فرمت استاندارد، تعیین می کنید. این مسیرها (Routes) هر URL ورودی را به کنترلر Action مربوط نگاشت (map) می کند. می دانید که هر کنترلر می تواند یک یا چندین متد اجرایی (Action) داشته باشد. به همراه URL می توان پارامترهای مورد نظر را نیز به کنترلر Action ارسال کرده و با این کار اطلاعات را به View پاس دهید.
در هنگام ایجاد یک پروژه جدید MVC، برنامه دارای یک مسیر پیش فرض به نام default در فایل RouteConfig.cs است. سایر مسیرهای مورد نظر را بایستی بالای این Route و با ساختار کلی زیر تعریف کنید :
+syntax
در ساختار فوق، controller تعیین کننده نام کنترلر پردازش کننده URL و Action نیز نام متد اجرایی تولید کننده View می باشد. همچنین می توانید یک یا چندین پارامتر را بعد از نام Action تعیین کنید. برای نمونه به مسیر (Route) زیر دقت کنید :
مثال+
توضیح+
توضیح بیشتر مسیر (Route) در MBC
همانطور که اشاره کردیم، برنامه های MVC از سیستم مسیردهی ASP.NET استفاده می کنند که تصمیم می گیرد هر URL توسط چه کنترلر و action ای اجرا شود.
زمانی که ویژوال استودیو، پروژه جدید MVC را ایجاد می کند ، یک یا چنیدن مسیر پیش فرض را برای سایت تعریف می کند.
نکته کاربردی : هنگامی که برای اولین برنامه، پروژه MVC را اجرا (Run) می کنید، ویژوال استودیو سایت را توسط کننرلر Home و متد Index و در یک Port تصادفی (مثلا در عکس زیر پورت +پورت) باز می کند. این صفحه درواقع همان صفحه خانه یا Default سایت است.
مثال : در کد فایل RouteConfig.cs فوق، یک URL پیش فرض تعیین شده بود به نام default، که URL ها را به کنترلر Home و متد اجرایی Index ارجاع می داد. بنابراین هر یک از آدرس های زیر را که بزنید، نتیجه یکسانی در مرورگر نمایش داده شده و صفحه اصلی سایت باز می شود :
http://localhost:63664/Home/
http://localhost:63664/Home/Index
نتیجه : هرگاه آدرس های مثل http://mysite/ یا http://mysite/Home در مرورگر درخواست شوند، برنامه توسط کنترلر Home و متد Index آن خروجی تولید می کند.
همانطور که در مثال فوق مشاهده کردید، به صورت پیش فرض، پروژه MVC دارای یک کنترلر به نام HomeController بوده که نقطه شروع اجرای سایت است.
مسیر پیش فرضی که ویژوال استودیو برای پروژه ایجاد می کند، تصور می کند شما همواره از این قاعده پش فرض برای URL های خود استفاده می کنید. حال اگر می خواهید قواعد خاص خود را در مسیردهی داشته باشید، بایستی مسیرهای دلخواه خود را به پروژه اضافه کنید.
آموزش ایجاد یک مسیر (Route) جدید در MVC
همانطور که گفتم، می توانید هر مسیر دلخواهی را برای پروژه خود تعیین کنید. اگر از نام متفاوتی برای action می خواهید استفاده کرده یا نیاز دارید همراه URL، پارامترهای داده ای را به صفحه پاس دهید، بایستی از مسیرهای دلخواه یا Custan Ruote استفاده کنید.
بیایید یک مثال ساده بزنیم. فرض کنیم صفحه ای دارید که می خواهید اطلاعات دانشجویان (Students) را نمایش دهد. برای این منظور می توان مسیری مثل زیر را تعیین کرد :
| syntax |
| کد |
routes.MapRoute(
"Process",
"Process/{action}/{id}",
defaults: new{
controller = "Process", action = "List ", id = UrlParameter.Optional}
);
|
همانطور که می بینید، نام مسیر را Students تعیین کرده ایم. همچنین هنگامی که شخصی URL ای مثل Students/Action/Id را درخواست می کند، به کنترلر Student ارجاع می شود. همچنین می توانیم action به نام List را به جای متد Index به عنوان متد پیش فرض کنترلر انتخاب نماییم.
حال اگر درخواستی مثل localhost/Student به مرورگر ارسال شود، موتور مسیردهی MVC کاربر را به کنترلر Student و متد اجرایی پیش فرض آن یعنی List ارجاع می دهد.
در کد فایل زیر، می توانید محتویات کامل جدید فایل RouteConfig.cs را مشاهده کنید :
| syntax |
| کد |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVCFirstApp{
public class RouteConfig{
public static void RegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Process", "Process/{action}/{id}",
defaults: new{
controller = " Process", action = "List ", id =
UrlParameter.Optional});
routes.MapRoute(
name: "Default", url: "{controller}/{action}/{id}",
defaults: new{
controller = "Home", action = "Index", id =
UrlParameter.Optional});
}
}
}
|
نحوه کار با مسیر (Route) جدید ایجاد شده :
مرحله اول : برای مشاهده خروجی و کار با مسیر (Route) جدید ایجاد شده، آدرس زیر را در مرورگر وارد نمایید :
http://localhost:63664/Student
خواهید دید که صفحه خطای 404 یا پیدا نکردن صفحه را صادر می کند، زیرا به دنیال کنترلر StudentController گشته و آن را پیدا نکرده است.
مرحله دوم : همانند تصویر زیر، کلیک راست بر روی پوشه Controller در منوی Solution Explorer و زدن دکمه Add و Controller، کنترلر Student Controller را به صفحه اضافه کنید :
با زدن دکمه Add، پنجره Scaffold به صورت زیر باز می شود :
مرحله سوم : گزینه MVC5Controller-empty را انتخاب کرده و دکمه Add را بزنید. پنجره تعیین نام کنترلر به صورت زیر باز می شود :
مرحله چهارم : نام کنترلر را StudentController تعیین کرده و دکمه Add را بزنید.
نکته مهم :
طبق قواعد MVC، نام تمامی کنترلرها، بایستی با واژه ی کلیدی Controller پایان یابد و درون پوشه Controller نیز قرار بگیرند.
اکنون یک فایل جدید C# به نام StudentController.cs را در پوشه Controllers برنامه مشاهده می کنید، که جهت ویرایش درون ویژوال استودیو، به صورت زیر باز شده است :
حال به دلیل اینکه متد اجرایی پیش فرض کنترلر StudentController، متد List است، بایستی آن را به جای Index به فایل اضافه کنیم.
مرحله پنجم : مقدار نوع برگشتی متد Index را از ActionResult به String و نام آن را به List تغییر دهید. همچنین در انتهای کد متد، با کلمه کلیدی return، یک متن را به عنوان خروجی متد، تعیین نمایید. همانند کد زیر :
| syntax |
| کد |
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCFirstApp.Controllers{
public class ProcessController : Controller{
// GET: Process
public string List(){
return "This is Process page";
}
}
}
|
مرحله ششم : اگر مجددا برنامه را اجرا (Run) نمایید، خواهید دید که مسیر پیش فرض، مجددا باز خواهد شد.
حال اگر آدرس +آدرس را وارد نمایید، خواهید دید کنترلر Student و متد List اجرا شده و خروجی متنی زیر را بر روی صفحه تولید می کنند :