Введение в ASP.NET Core MVC. Первое приложение в Visual Studio

В предыдущей части мы в общих чертах познакомились с тем, что из себя представляет MVC. В этой — посмотрим как реализуется MVC в ASP.NET Core. Для этого мы создадим своё первое приложение ASP.NET Core MVC и посмотрим на то, какие в этом приложении принципиальные отличия от тех приложений, которые мы создавали, когда разбирались с базовой моделью ASP.NET Core.

Первое приложение ASP.NET Core MVC

Для того, чтобы создать своё первое приложение ASP.NET Core MVC выберем в Visual Studio следующий шаблон проекта:

По этому шаблону мы создадим приложение в котором уже будут содержаться все сервисы и компоненты middleware, необходимые для включения в проекте функциональности MVC.

На втором шаге необходимо задать название проекта

и, на третьем — указать дополнительные параметры, которые мы оставим со значениями по умолчанию

После этого мы увидим наше приложение в обозревателе решений, которое сразу же можем запустить. По умолчанию оно будет выглядеть следующим образом:

Вначале, посмотрим на структуру проекта.

Структура проекта ASP.NET Core MVC

  • Connected Services — подключенные сервисы из Azure. Для пустого приложения этот узел ничего не содержит.
  • Зависимости (Dependencies)  содержит все добавленные в проект пакеты и библиотеки. Пустой проект ASP.NET Core MVC содержит только базовые возможности ASP.NET Core и базовые возможности самой платформы .NET. То есть в этой папке проекта в разделе «Платформы» вы найдете всего два элемента:

  • папка wwwroot — содержит статические файлы приложения, такие как скрипты, css-файлы и т.д. По умолчанию в этой папке уже расположено достаточно много чего — jquery, bootstrap, иконка приложения и т.д.
  • папка Controllers — предназначена для размещения в ней всех контроллеров вашего приложения. По умолчанию в этой папке находится всего один файл — домашний контроллер (HomeController.cs)
  • папка Models — содержит все модели вашего приложения. В частности, в этой папке можно найти модель для предоставлению ошибки, которая может возникнуть в приложении
  • папка Views — содержит представления, используемые в приложении. Здесь по умолчанию также содержится ряд файлов, часть из которых расположены во вложенных папках. В частности в подпапке Home содержатся представления, которые используются при обращении к котроллеру HomeController. В папке Shared обычно сохраняются фалы (представления) используемые всем приложением, например, представления, отвечающие за макет приложения.
  • Properties — содержит настройки проекта. В частности, в файле launchSettings.json описаны настройки запуска проекта.
  • appsettings.json  файл конфигурации проекта в формате json
  • Program.cs  главный файл приложения, в котором расположен метод Main, с которого и начинается выполнение приложения. Код этого файла настраивает и запускает веб-приложение.

Часть из элементов структуры проекта ASP.NET Core MVC нам уже известна по работе с базовой моделью ASP.NET Core, часть — новые для нас файлы и папки, например, папки Controllers/Models/Views. Теперь посмотрим на код проекта, а именно — на метод Main, который содержится в классе Program.

Метод Main в ASP.NET Core MVC

Вот как выглядит код метода Main для пустого шаблона ASP.NET Core MVC

    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        // Add services to the container.
        builder.Services.AddControllersWithViews();

        var app = builder.Build();

        // Configure the HTTP request pipeline.
        if (!app.Environment.IsDevelopment())
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

         

        app.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");

        app.Run();
    }
}

По основным моментам, касающихся создания приложения ASP.NET Core можно изучить вот эту статью. Мы же остановимся здесь только на принципиальных отличиях проекта ASP.NET Core MVC от приложения, созданного по базовой модели. А принципиальные отличия следующие:

в проект подключаются сервисы функциональности MVC:

builder.Services.AddControllersWithViews();

По сути, этот метод расширения регистрирует сразу ряд сервисов, которые могут нам потребоваться в дальнейшем в работе. О том, что это за сервисы и как они влияют на функциональность нашего приложения мы поговорим позднее.

Далее, мы видим подключение в проект различных компонентов middleware, с которыми мы уже знакомились, а именно:

и, наконец, следующее принципиальное отличие от чистого ASP.NET Core — сопоставление шаблона маршрута с контроллером:

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Метод MapControllerRoute является методом расширения для IEndpointRouteBuilder и содержит следующие параметры:

  • name — название маршрута (по умолчанию, это имя default)
  • pattern — шаблон, которому должен соответствовать запрос пользователя.

в нашем случае, шаблон представляет собой путь, состоящий из трех сегментов {controller=Home}/{action=Index}/{id?} где каждый сегмент — это параметр маршрута.

  • Первый параметр {controller=Home} — имя контроллера (по умолчанию — это Home). Здесь стоит ещё раз обратить внимание на то, что в нашем приложении имеется контроллер класс которого называется HomeController. 
  • Второй параметр {action=Index} указывает на действие (метод) в контроллере, которое должно выполняться. По умолчанию, этот параметр будет равен Index.
  • Третий параметр {id?} — необязательный параметр, который может отсутствовать в запросе.

Таким образом, при запуске приложения, так как путь запроса будет пустым, то мы попадем, фактически на следующий маршрут [host]/Home/Index . Для сопоставления контроллеров и их методов с запросами в ASP.NET Core действует ряд соглашений по умолчанию и о них мы ещё поговорим. Пока же на этом закончим.

Итого

Для включения функциональности MVC в приложение ASP.NET Core вызывается либо метод AddControllersWithViews(), который добавляет в проект сразу ряд сервисов, связанных с MVC (и не только, например, в этом же методе добавляется сервис аутентификации), либо, мы можем подключать только интересующие нас сервисы, связанные с MVC, используя отдельные методы расширения, например, AddMvcCore(), AddControllers() и т.д. Для сопоставления запроса и конечной точки в приложении ASP.NET Core MVC используется метод MapControllerRoute , который сопоставляет шаблон маршрута с контроллером и его методом.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии