Часть 2. Добавление контроллера в приложение MVC ASP.NET Core

Часть 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**. ![Contextual menu](

    /tutorials/first-mvc-app-mac/adding-controller/_static/add_controller.png) Select **ASP.NET Core** and **Controller Class**. Name the controller **HelloWorldController**. ![Add MVC controller and name it](

    Замените все содержимое 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 по умолчанию, определяет вызываемый код на основе формата следующего вида:

      Формат маршрутизации задается в файле 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 автоматически сопоставляет именованные параметры из строки запроса с параметрами метода. Дополнительные сведения см. в разделе Привязка модели.