Часть 2. Добавление контроллера в приложение MVC ASP.NET Core
Модель архитектуры MVC разделяет приложение на три основных компонента: Model (модель), View (представление) и Controller (контроллер). С помощью модели MVC можно создавать приложения, которые удобнее тестировать и обновлять по сравнению с традиционными монолитными приложениями.
Приложения на основе модели MVC содержат следующее:
- Модели: классы, представляющие данные в приложении. Классы модели используют логику проверки, которая позволяет применять бизнес-правила к этим данным. Как правило, объекты модели извлекают и сохраняют состояние модели в базе данных. В этом руководстве модель Movie извлекает сведения о фильмах из базы данных и передает их в представление или обновляет. Обновленные данные записываются в базу данных.
- Представления: компоненты, которые формируют пользовательский интерфейс приложения. Как правило, в пользовательском интерфейсе отображаются данные модели.
- Контроллеры: классы, которые:
- обрабатывают запросы браузера;
- получают данные модели;
- вызывают шаблоны представления вызовов, которые возвращают ответ.
В приложении MVC представление используется только для отображения информации. Контроллер обрабатывает и реагирует на ввод и взаимодействие пользователя. Например, контроллер обрабатывает сегменты URL-адреса и значения строки запроса и передает эти значения в модель. Модель может использовать эти значения для выполнения запросов к базе данных. Пример.
- https://localhost:5001/Home/Privacy : задает контроллер Home и действие Privacy .
- https://localhost:5001/Movies/Edit/5 : это запрос на изменение фильма с с помощью контроллера Movies и действия Edit , которые подробно описаны далее в этом руководстве.
Данные маршрута описаны далее в этом руководстве.
Структура архитектуры MVC разделяет приложение на три основных группы компонентов: модели, представления и контроллеры. Этот шаблон помогает реализовать принципы разделения задач: логика пользовательского интерфейса относится к представлению. Логика ввода относится к контроллеру. Бизнес-логика размещается в модели. Подобное разделение позволяет эффективно справляться с трудностями при построении приложения, поскольку оно дает возможность работать одновременно с одним аспектом реализации, не затрагивая при этом код других. Например, вы можете изменять код представления независимо от кода бизнес-логики.
Эти принципы продемонстрированы в этой серии руководств при создании приложения для работы с фильмами. Проект MVC содержит папки для контроллеров и представлений.
Добавление контроллера
- Visual Studio
- Visual Studio Code
- Visual Studio для Mac
В Обозревателе решений щелкните правой кнопкой мыши Контроллеры > Добавить > Контроллер.
В диалоговом окне Добавление нового шаблонного элемента выберите Контроллер MVC — пустой>Добавить.
В диалоговом окне Добавление нового элемента — MvcMovie введите HelloWorldController.cs и щелкните Добавить.
Щелкните значок обозревателя, а затем правой кнопкой мыши щелкните Контроллеры > Новый файл и присвойте новому файлу имя HelloWorldController.cs .
При использовании Visual Studio для Mac см. версию этого руководства для .NET 5.
Add > New File**.  Select **ASP.NET Core** and **Controller Class**. Name the controller **HelloWorldController**. : HelloWorld .
В первом комментарии указано, что этот метод HTTP GET вызывается путем добавления /HelloWorld/ к базовому URL-адресу.
Во втором комментарии указано, что этот метод HTTP GET вызывается путем добавления /HelloWorld/Welcome/ к URL-адресу. Далее в этом руководстве используется механизм формирования шаблонов для создания методов HTTP POST , которые обновляют данные.
Запустите приложение без отладчика.
Добавьте "HelloWorld" к пути в адресной строке. Метод Index возвращает строку.
MVC вызывает классы контроллера (и методы действия в них) в зависимости от входящего URL-адреса. Логика маршрутизации URL-адресов, используемая моделью MVC по умолчанию, определяет вызываемый код на основе формата следующего вида:
Формат маршрутизации задается в файле Program.cs .
Если при переходе к приложению не указать сегменты URL-адреса, по умолчанию устанавливаются контроллер Home и метод Index, которые заданы в выделенной выше строке шаблона. В предшествующих сегментах URL-адресов:
- Первый сегмент URL-адреса определяет класс контроллера, который будет выполняться. Поэтому localhost:5001/HelloWorld сопоставляется с классом Controller HelloWorld.
- Вторая часть сегмента URL-адреса определяет метод действия для класса. Таким образом, localhost:5001/HelloWorld/Index выполняет метод Index класса HelloWorldController . Обратите внимание, что в этом случае достаточно перейти по адресу localhost:5001/HelloWorld , а метод Index вызывается по умолчанию. Если имя вызываемого метода не указано явно, для контроллера вызывается метод по умолчанию Index .
- В третьей части сегмента URL-адреса ( id ) указываются данные маршрута. Данные маршрута описаны далее в этом руководстве.
Перейдите по адресу https://localhost:/HelloWorld/Welcome . Замените на номер порта.
Метод Welcome запускается и возвращает строку This is the Welcome action method. . Для этого URL-адреса заданы контроллер HelloWorld и метод действия Welcome . Часть URL-адреса [Parameters] на данный момент еще не использовалась.
Измените код, чтобы передать сведения о параметрах из URL-адреса в контроллер. Например, /HelloWorld/Welcome?name=Rick&numtimes=4 .
Измените метод Welcome , включив два параметра, как показано в следующем коде.
- Использует функцию необязательного параметра C#, указывая, что параметр numTimes по умолчанию принимает значение 1, если ему не было передано значение.
- Использует HtmlEncoder.Default.Encode для защиты приложения от злонамеренного ввода данных (например, JavaScript).
- Использует интерполированные строки в $"Hello , NumTimes is: " .
Запустите приложение и перейдите по адресу https://localhost:/HelloWorld/Welcome?name=Rick&numtimes=4 . Замените на номер порта.
Попробуйте использовать разные значения для name и numtimes в URL-адресе. Система привязки модели MVC автоматически сопоставляет именованные параметры из строки запроса с параметрами метода. Дополнительные сведения см. в разделе Привязка модели.
На предыдущем рисунке:
- Сегмент URL-адреса Parameters не используется.
- Параметры name и numTimes передаются в строку запроса.
- Вопросительный знак ( ? ) в приведенном выше URL-адресе используется в качестве разделителя, после которого указывается строка запроса.
- Символом & отделяются пары "поле-значение".
Замените метод Welcome следующим кодом:
Запустите приложение и введите следующий URL-адрес: https://localhost:/HelloWorld/Welcome/3?name=Rick
В предыдущем URL-адресе:
- Третий сегмент URL-адреса сопоставляется с параметром маршрута id .
- Метод Welcome содержит параметр id , который сопоставляется с шаблоном URL-адреса в методе MapControllerRoute .
- Завершающий символ ? указывает на начало строки запроса.
В предшествующем примере:
- Третий сегмент URL-адреса сопоставляется с параметром маршрута id .
- Метод Welcome содержит параметр id , который сопоставляется с шаблоном URL-адреса в методе MapControllerRoute .
- Завершающий символ ? (в id? ) указывает, что параметр id является необязательным.
Модель архитектуры MVC разделяет приложение на три основных компонента: Model (модель), View (представление) и Controller (контроллер). С помощью модели MVC можно создавать приложения, которые удобнее тестировать и обновлять по сравнению с традиционными монолитными приложениями.
Приложения на основе модели MVC содержат следующее:
- Модели: классы, представляющие данные в приложении. Классы модели используют логику проверки, которая позволяет применять бизнес-правила к этим данным. Как правило, объекты модели извлекают и сохраняют состояние модели в базе данных. В этом руководстве модель Movie извлекает сведения о фильмах из базы данных и передает их в представление или обновляет. Обновленные данные записываются в базу данных.
- Представления: компоненты, которые формируют пользовательский интерфейс приложения. Как правило, в пользовательском интерфейсе отображаются данные модели.
- Контроллеры: классы, которые:
- обрабатывают запросы браузера;
- получают данные модели;
- вызывают шаблоны представления вызовов, которые возвращают ответ.
В приложении MVC представление используется только для отображения информации. Контроллер обрабатывает и реагирует на ввод и взаимодействие пользователя. Например, контроллер обрабатывает сегменты URL-адреса и значения строки запроса и передает эти значения в модель. Модель может использовать эти значения для выполнения запросов к базе данных. Пример.
- https://localhost:5001/Home/Privacy : задает контроллер Home и действие Privacy .
- https://localhost:5001/Movies/Edit/5 : это запрос на изменение фильма с с помощью контроллера Movies и действия Edit , которые подробно описаны далее в этом руководстве.
Данные маршрута описаны далее в этом руководстве.
Структура архитектуры MVC разделяет приложение на три основных группы компонентов: модели, представления и контроллеры. Этот шаблон помогает реализовать принципы разделения задач: логика пользовательского интерфейса относится к представлению. Логика ввода относится к контроллеру. Бизнес-логика размещается в модели. Подобное разделение позволяет эффективно справляться с трудностями при построении приложения, поскольку оно дает возможность работать одновременно с одним аспектом реализации, не затрагивая при этом код других. Например, вы можете изменять код представления независимо от кода бизнес-логики.
Эти принципы продемонстрированы в этой серии руководств при создании приложения для работы с фильмами. Проект MVC содержит папки для контроллеров и представлений.
Добавление контроллера
- Visual Studio
- Visual Studio Code
- Visual Studio для Mac
В Обозревателе решений щелкните правой кнопкой мыши Контроллеры > Добавить > Контроллер.
В диалоговом окне Добавление шаблона выберите Контроллер MVC — пустой.
В диалоговом окне Добавление нового элемента — MvcMovie введите HelloWorldController.cs и щелкните Добавить.
Щелкните значок обозревателя, а затем правой кнопкой мыши щелкните Контроллеры > Новый файл и присвойте новому файлу имя HelloWorldController.cs .
В Обозревателе решений щелкните правой кнопкой мыши Контроллеры > Добавить > Новый файл.
Выберите ASP.NET Core и Класс контроллера.
Присвойте контроллеру имя HelloWorldController.
Замените все содержимое Controllers/HelloWorldController.cs следующим:
Каждый метод public в контроллере вызывается как конечная точка HTTP. В приведенном выше примере оба метода возвращают строку. Обратите внимание на комментарии, предшествующие каждому методу.
Конечная точка HTTP:
- Это URL-адрес, который является целевым в веб-приложении, например https://localhost:5001/HelloWorld .
- Она объединяет:
- используемый протокол: HTTPS ;
- сетевое расположение веб-сервера, включая порт TCP: localhost:5001 ;
- целевой универсальный код ресурса (URI): HelloWorld .
В первом комментарии указано, что этот метод HTTP GET вызывается путем добавления /HelloWorld/ к базовому URL-адресу.
Во втором комментарии указано, что этот метод HTTP GET вызывается путем добавления /HelloWorld/Welcome/ к URL-адресу. Далее в этом руководстве используется механизм формирования шаблонов для создания методов HTTP POST , которые обновляют данные.
Запустите приложение без отладчика.
Добавьте "HelloWorld" к пути в адресной строке. Метод Index возвращает строку.
MVC вызывает классы контроллера (и методы действия в них) в зависимости от входящего URL-адреса. Логика маршрутизации URL-адресов, используемая моделью MVC по умолчанию, определяет вызываемый код на основе формата следующего вида:
Формат маршрутизации задается в методе Configure в файле Startup.cs .
Если при переходе к приложению не указать сегменты URL-адреса, по умолчанию устанавливаются контроллер Home и метод Index, которые заданы в выделенной выше строке шаблона. В предшествующих сегментах URL-адресов:
- Первый сегмент URL-адреса определяет класс контроллера, который будет выполняться. Поэтому localhost:5001/HelloWorld сопоставляется с классом HelloWorldController.
- Вторая часть сегмента URL-адреса определяет метод действия для класса. Таким образом, localhost:5001/HelloWorld/Index выполняет метод Index класса HelloWorldController . Обратите внимание, что в этом случае достаточно перейти по адресу localhost:5001/HelloWorld , а метод Index вызывается по умолчанию. Если имя вызываемого метода не указано явно, для контроллера вызывается метод по умолчанию Index .
- В третьей части сегмента URL-адреса ( id ) указываются данные маршрута. Данные маршрута описаны далее в этом руководстве.
Перейдите по адресу https://localhost:/HelloWorld/Welcome . Замените на номер порта.
Метод Welcome запускается и возвращает строку This is the Welcome action method. . Для этого URL-адреса заданы контроллер HelloWorld и метод действия Welcome . Часть URL-адреса [Parameters] на данный момент еще не использовалась.
Измените код, чтобы передать сведения о параметрах из URL-адреса в контроллер. Например, /HelloWorld/Welcome?name=Rick&numtimes=4 .
Измените метод Welcome , включив два параметра, как показано в следующем коде.
- Использует функцию необязательного параметра C#, указывая, что параметр numTimes по умолчанию принимает значение 1, если ему не было передано значение.
- Использует HtmlEncoder.Default.Encode для защиты приложения от злонамеренного ввода данных (например, JavaScript).
- Использует интерполированные строки в $"Hello , NumTimes is: " .
Запустите приложение и перейдите по адресу https://localhost:/HelloWorld/Welcome?name=Rick&numtimes=4 . Замените на номер порта.
Попробуйте использовать разные значения для name и numtimes в URL-адресе. Система привязки модели MVC автоматически сопоставляет именованные параметры из строки запроса с параметрами метода. Дополнительные сведения см. в разделе Привязка модели.