Добавление MVC в пустой проект

Последнее обновление: 13.11.2022

В прошлой теме был создан первый проект ASP.NET Core, который по умолчанию применяет паттерн MVC, но осталось за кадром, что именно заставляет паттерн MVC работать в проекте на ASP.NET Core. Рассмотрим этот момент и чтобы лучше это понять, возьмем стандартный пустой проект ASP.NET, который по умолчанию никакой функциональности MVC в проект не подключает. (Для этого можно либо в .NET CLI создадить проект с помощью команды dotnet new web, либо в Visual Studio создадать новый проект по типу ASP.NET Core Empty)

Подключение MVC в пустой проект ASP.NET Core

Допустим, в моем случае проект называется MvcApp. По умолчанию создается примитивный проект ASP.NET Core, в котором файл Program.cs стандартный код:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Теперь задействуем функциональность фреймворка MVC в нашем приложении и изменим файл Program.cs следующим образом:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();	// добавляем сервисы MVC

var app = builder.Build();

// устанавливаем сопоставление маршрутов с контроллерами
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Прежде всего надо отметить, что функциональность MVC, в частности, поддержка контроллеров и представлений, подключается в приложение в виде сервиса - в данном случае с помощью вызова services.AddControllersWithViews(). После этого мы можем использовать функциональность фреймворка MVC.

Кроме того, чтобы связать приходящие от пользователей запросы с контроллерами применяется метод MapControllerRoute(). Через перевый параметр - name в метод передается название маршрута - в данном случае "default". Через второй параметр - параметр pattern передается шаблон маршрута, которому должен соответствовать запрос. В качестве шаблона маршрута применяется шаблон "{controller=Home}/{action=Index}/{id?}", который представляет трехсегментный запрос. В нем первый сегмент представляет контроллер, второй сегмент - метод контроллера, а третий - необязательный параметр. При этом если в запросе не указаны сегменты (например, обращение идет к корню веб-приложения), то в качестве контроллера по умолчанию применяется HomeController, а в качестве его метода - метод Index.

Добавление контроллера

Теперь добавим в проект для хранения контроллеров папку Controllers. И затем в нее добавим новый класс, который назовем HomeController и который будет иметь следующий код:

using Microsoft.AspNetCore.Mvc;

namespace MvcApp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
}

Контроллер наследуется от класса Controller и в данном случае он имеет один метод Index, который с помощью метода View обращается к представлению.

Добавление представления

Теперь добавим в проект папку Views, которая будет хранить представления. В эту папку вначале добавим каталог Home - каталог, предназначенный непосредственно для представлений контроллера Home. И в конце добавим в каталог Views/Home новый элемент по типу Razor View (Empty), который назовем Index.cshtml.

Добавление представление в проект Mvc в ASP NET Core

Определим в этом файле следующий код:

@{
    Layout = null;
}
<!doctype html>
<html>
<head>
    <title>METANIT.COM</title>
    <meta charset="utf-8" />
</head>
<body>
    <h2>Hello METANIT.COM!</h2>
</body>
</html>

Это простейшее представление, которое будет использоваться методом Index контроллера HomeController. То есть в итоге у нас получится следующая структра проекта:

Первый проект c ASP.NET Core MVC в C#

Теперь запустим приложение на выполнение, и браузер выведет сообщение, определенное в представлении Index.cshtml:

запуск проекта на ASP.NET Core MVC и C#

Таким образом мы можем добавлять функциональность MVC в свой проект. Однако, как правило, для работы с MVC используется шаблон ASP.NET Core Web App (Model-View-Controller), который по умолчанию содержит некоторую базовую функциональность.

Сервисы MVC

Функциональность MVC и ее работа в приложении зависит от добавляемых сервисов. В примере выше мы использовали метод AddControllersWithViews() для добавления сервисов MVC, благодаря чему система маршрутизации смогла связать запрос с контроллером. Однако в данном случае у нас есть ряд опций по встраиванию сервисов, которые мы можем при необходимости использовать:

  • AddMvc(): добавляет все сервисы фреймворка MVC (в том числе сервисы для работы с аутентификацией и авторизацией, валидацией и т.д.)

  • AddMvcCore(): добавляет только основные сервисы фреймворка MVC, а всю дополнительную функциональность, типа аутентификацией и авторизацией, валидацией и т.д., необходимо добавлять самостоятельно

  • AddControllersWithViews(): добавляет только те сервисы фреймворка MVC, которые позволяют использовать контроллеры и представления и связанную функциональность. При создании проекта по типу ASP.NET Core Web App (Model-View-Controller) используется именно этот метод

  • AddControllers(): позволяет использовать контроллеры, но без представлений.

И в зависимости от того, насколько широко нам надо использовать возможности фреймворка MVC, выбирается соответствующий метод. Например, в примере выше мы могли бы использовать вместо вызова AddControllersWithViews() метод AddMvc().

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850