Создание проекта для примера
Для демонстрации системы маршрутизации нам нужен проект, к которому мы можем добавить роуты. Мы создали новое MVC приложение, используя шаблон Basic
, и назвали проект UrlsAndRoutes
.
Совет
Мы включили в эту главу различные модульные тесты, и если вы хотите воссоздать их, то вам нужно будет выбрать опцию
Create a unit test project
, когда вы выбираете шаблонBasic
, и использовать NuGet, чтобы добавить Moq в проект юнит тестирования.
Для демонстрации роутов мы собираемся добавить некоторые простые контроллеры в приложение. В этой главе мы хотим только показать способ, которым интерпретируются URL, чтобы вызвать методы действия, поэтому используемые модели представления являются строковыми значениями во ViewBag
, который сообщает имена контроллера и метода действия. Во-первых, создайте контроллер Home
и установите его содержание, чтобы оно совпадало с тем, что в листинге 13-1.
Листинг 13-1: Содержание контроллера Home
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace UrlsAndRoutes.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Controller = "Home";
ViewBag.Action = "Index";
return View("ActionName");
}
}
}
Создайте контроллер Customer
и с содержанием, как в листинге 13-2.
Листинг 13-2: Содержание контроллера Customer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace UrlsAndRoutes.Controllers
{
public class CustomerController : Controller
{
public ActionResult Index()
{
ViewBag.Controller = "Customer";
ViewBag.Action = "Index";
return View("ActionName");
}
public ActionResult List()
{
ViewBag.Controller = "Customer";
ViewBag.Action = "List";
return View("ActionName");
}
}
}
Создайте второй контроллер Admin
, как в листинге 13-3.
Листинг 13-3: Содержание контроллера Admin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace UrlsAndRoutes.Controllers
{
public class AdminController : Controller
{
public ActionResult Index()
{
ViewBag.Controller = "Admin";
ViewBag.Action = "Index";
return View("ActionName");
}
}
}
Мы определили представление ActionName
во всех методах действия этих контроллеров, что позволяет нам определить одно представление и использовать его во всем приложении. Добавьте новое представление с именем ActionName.cshtml
в папку /Views/Shared
и установите его содержание, чтобы оно соответствовало тому, что показано в листинге 13-4.
Листинг 13-4: Содержание представления ActionName.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ActionName</title>
</head>
<body>
<div>The controller is: @ViewBag.Controller</div>
<div>The action is: @ViewBag.Action</div>
</body>
</html>
Если вы запустите приложение, вы увидите содержимое, как на рисунке 13-1.
Рисунок 13-1: Запуск приложения
