Учебный курс по ASP.NET MVC 3, глава 5. Маршрутизация ASP.NET
Это продолжение курса по разработки веб-приложений на базе фреймворка ASP.NET MVC 3, начало курса вы можете прочитать в статьях:
- Учебный курс по ASP.NET MVC 3, глава 1. Обзор ASP.NET MVC
- Учебный курс по ASP.NET MVC 3, глава 2. Структура приложения ASP.NET MVC
- Учебный курс по ASP.NET MVC 3, глава 3. Модель выполнения приложения ASP.NET MVC
- Учебный курс по ASP.NET MVC 3, глава 4. Основы моделей, представлений и контроллеров
В этом уроке вам будет представлено описание важной функциональности каждого приложения ASP.NET MVC – маршрутизации ASP.NET. Данный модуль отвечает за маршрутизацию входящих запросов на методы контроллеров MVC. В конце урока вы узнаете, как стандартная таблица маршрутизации связывается запросы с методами контроллеров.
Использование стандартной таблицы маршрутизации
По умолчанию создаваемое приложение ASP.NET MVC сконфигурировано на использование маршрутизации. Маршрутизация настраивается в двух местах.
Сперва маршрутизация включается в конфигурационном файле Web.config. В нем есть четыре секции, относящиеся к маршрутизации: system.web.httpModules, system.web.httpHandlers,system.webserver.modules,system.webserver.handlers. Не удаляйте эти секции, иначе маршрутизации не будет работать.
Также таблица маршрутизации создается в файле Global.asax. Этот файл содержит обработку событий в жизненном цикле приложения, и таблица маршрутизации создается во время события Application Start. Листинг 1 содержит код стандартного файла Global.asax для приложения ASP.NET MVC.
Листинг 1 - Global.asax.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit https://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
По умолчанию таблица маршрутизации содержит один маршрут Default, связывающий первый сегмент URL с именем контроллера, второй с методом, и третий с параметром id. Например URL
/Home/Index/3
Будет связан с:
контроллер = Home
метод = Index
id = 3
И будет вызван метод
HomeController.Index(3)
Ввод пустого URL приведет к вызову метода Index контроллера по умолчанию HomeController, код которого приведен в листинге 2.
Листинг 2 - HomeController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(string id)
{
return View();
}
}
}
Метод Index() принимает один параметр Id, URL /Home приводит к вызову этого метода с пустым значением параметра Id. URL /Home также приведет к вызову этого метода, но уже без параметров, код которого приведен в листинге 3.
листинг 3 - HomeController. cs (метод Index без параметров)
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
Метод Index не содержит на входе никаких параметров, и URL /Home вызовет именно этот метод. URL /Home/Index/3 также вызовет этот метод (id игнорируется). URL /Home также подходит к методу Index(), код которого приведен в листинге 4.
Листинг 4 - HomeController. cs (Метод Index с параметрами nullable)
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(int? id)
{
return View();
}
}
}
Метод Index() принимает один параметр Integer и, поскольку он является nullable (может иметь значение Null), метод Index() может быть вызван без дальнейших ошибок. Наконец, вызов Index() из листинга 5 с URL /Home вызовет исключение, так как параметр id – не nullable. Если вы попробуете вызвать метод, вы получите ошибку (рисунок 1)..
Листинг 5 - HomeController. cs (Метод Index с параметром Id)
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index(int id)
{
return View();
}
}
}
Рис. 1. Вызов метода, подразумевающего наличие параметра
URL /Home/Index/3, с другой стороны, отработает нормально с методом, код которого приведен в листинге 5. Запрос /Home/Index/3 вызовет метод Index() с параметром Id, значение которого будет равно 3.
Резюме
Цель этого урока – предоставить краткую информацию о маршрутизации ASP.NET. Мы рассмотрели стандартную таблицу маршрутизации приложения ASP.NET MVC и изучили, как стандартная таблица маршрутизации связывает URL-ы и методы контроллеров.
Благодарности
Благодарим Александра Белоцерковского за неоценимую помощь в подготовке данного курса.
Comments
Anonymous
April 22, 2012
Уж как-то совсем кратко, можно было бы немножечко подробней.Anonymous
December 25, 2012
Вы бы еще азбуку бы описали - что буквы бывают строчные и прописные))) А нам мясо по давай, например маршрутизация, когда существуют категории с под категориями и тд, а на объявленные Вами цели курса мне начхать , Вы извиняюсь мужики или где?