Как запустить asp net core приложение
Следующий код запуска приложения поддерживает:
Класс Startup настраивает службы и конвейер запросов приложения.
Класс Startup
- При необходимости содержит метод ConfigureServices для настройки служб приложения. Служба — многократно используемый компонент, обеспечивающий функциональность приложения. Службы регистрируются в ConfigureServices и используются в приложении с помощью внедрения зависимостей (DI) или ApplicationServices.
- Содержит метод Configure для создания конвейера обработки запросов приложения.
Предыдущий пример предназначен для Razor Pages; версия для MVC похожа.
Узел предоставляет службы, которые доступны конструктору классов Startup . Приложение добавляет дополнительные службы через ConfigureServices . Как службы узла, так и службы приложения доступны в Configure и во всем приложении.
При использовании универсального узла (IHostBuilder) в конструктор Startup могут внедряться только следующие типы служб:
Большинство служб недоступны, пока не будет вызван метод Configure .
Несколько запусков
Когда приложение определяет отдельные классы Startup для различных сред (например, StartupDevelopment ), подходящий класс Startup выбирается во время выполнения. Класс, у которого суффикс имени соответствует текущей среде, получает приоритет. Если приложение выполняется в среде разработки и включает в себя оба класса — Startup и StartupDevelopment , используется класс StartupDevelopment . Дополнительные сведения см. в статье Использование нескольких сред.
Дополнительные сведения об узле см. в разделе Узел. Сведения об обработке ошибок во время запуска см. в разделе Обработка исключений при запуске.
Метод ConfigureServices
- Необязательный элемент.
- Вызывается узлом перед методом Configure для настройки служб приложения.
- По соглашению используется для задания параметров конфигурации.
Узел может настраивать некоторые службы перед вызовом методов Startup . Дополнительную информацию см. в разделе Узел.
Для функций, нуждающихся в значительной настройке, существуют методы расширения Add в IServiceCollection. Например, Add DbContext, Add DefaultIdentity, Add EntityFrameworkStores и AddRazorPages:
Добавление служб в контейнер служб делает их доступными в приложении и в методе Configure . Службы разрешаются посредством внедрения зависимостей или из ApplicationServices.
Метод Configure
Предыдущий пример предназначен для Razor Pages; версия для MVC похожа.
Каждый метод расширения Use добавляет один или несколько компонентов ПО промежуточного слоя в конвейер запросов. Например, UseStaticFiles настраивает ПО промежуточного слоя для обслуживания статических файлов.
Каждый компонент ПО промежуточного слоя в конвейере запросов отвечает за вызов следующего компонента в конвейере или замыкает цепочку, если это необходимо.
В сигнатуре метода Configure могут быть указаны дополнительные службы, такие как IWebHostEnvironment , ILoggerFactory или любые службы, определенные в ConfigureServices . Эти службы внедряются, если доступны.
Настройка служб без запуска
Для настройки служб и конвейера обработки запросов в построителе узлов вместо класса Startup можно использовать удобные методы ConfigureServices и Configure . Несколько вызовов ConfigureServices добавляются друг к другу. При наличии нескольких вызовов метода Configure используется последний вызов Configure .
Расширение класса Startup с использованием фильтров запуска
Используйте IStartupFilter в следующих случаях:
IStartupFilter реализует метод Configure, который принимает и возвращает Action<IApplicationBuilder> . IApplicationBuilder определяет класс для настройки конвейера запросов приложения. Дополнительные сведения см. в разделе Создание конвейера ПО промежуточного слоя с помощью IApplicationBuilder.
Каждый интерфейс IStartupFilter может добавлять один или несколько компонентов ПО промежуточного слоя в конвейер запросов. Фильтры вызываются в том порядке, в котором они были добавлены в контейнер службы. Фильтры могут добавлять ПО промежуточного слоя до или после передачи управления следующему фильтру, поэтому они добавляются в начало или конец конвейера приложения.
В следующем примере показана регистрация ПО промежуточного слоя с помощью IStartupFilter . ПО промежуточного слоя RequestSetOptionsMiddleware задает значения параметров из параметра строки запроса:
RequestSetOptionsMiddleware настраивается в классе RequestSetOptionsStartupFilter :
IStartupFilter регистрируется в контейнере службы в ConfigureServices.
Порядок выполнения ПО промежуточного слоя определяется порядком регистраций IStartupFilter :
Несколько реализаций IStartupFilter могут взаимодействовать с одними и теми же объектами. Если важен порядок, упорядочите регистрации службы IStartupFilter в соответствии с требуемым порядком выполнения ПО промежуточного слоя.
Приводимые здесь команды установки подходят для дистрибутивов Ubuntu 16.04/Mint 18.x, для остальных можно найти здесь.
Устанавливаем новейший на данный момент RC4 для совместимости с новейшим генератором проектов aspnet:
Установка Visual Studio Code
Устанавливается легко в пару кликов по этой ссылке.
Запускаем Visual Studio Code, нажимаем Ctrl-P, вводим команду:
ext install csharp
В появившейся слева панели нажимаем «Установить» напротив соответствующего расширения, если это не произошло автоматически. Visual Studio Code можно пока закрыть.
Подготовка среды разработки и формирование шаблонов приложений
Устанавливаем новейший node.js с оригинального сайта (тот, что идёт с дистрибутивом не подходит), он нам нужен из-за менеджера пакетов npm, который идёт вместе с ним:
Для других дистрибутивов инструкция здесь.
Инициализация проекта
Для инициализации используется скаффолдер Yeoman — инициализатор проекта, включающий в себя развёртывание файловой структуры и генерацию шаблона проекта, т.е. исходного кода приложения. Включает в себя скаффолдер Yo, менеджер пакетов Bower и менеджер задач Grunt. При установке Yo вам будут установлены также Bower и Grunt. Здесь устанавливаем в любом терминале также новейший генератор aspnet, в котором возвращена система сборки msbuild вместо project.json:
Запуск генератора проекта
- Выбираем пункт Web Application Basic [without Membership and Authorization] и нажимаем Enter
- Выбираем Bootstrap (3.3.6) в качестве фреймворка UI и нажимаем Enter
- Оставляем имя «WebApplicationBasic» в качестве имени приложения и нажимаем Enter
- Установка: npm install -g generator-aspnetpostgresql
- Генерация шаблона: yo aspnetpostgresql
Когда генератор окончит создание файлов, он проинструктирует вас как восстановить, собрать и запустить приложение:
Your project is now created, you can use the following commands to get going
cd «WebApplicationBasic»
dotnet restore
dotnet build (optional, build will also happen with it's run)
dotnet run
Восстановить и собрать можно, а вот запускать пока рано: нужно ещё кое что сделать.
При первом запуске Visual Studio Code выдаст предупреждение об отсутствии необходимых инструментов для сборки и отладки. Нажимаем Yes , чтобы добавить их. Без этого автоматическая отладка и сборка средствами Visual Studio Code будет недоступна, а только через терминал командами dotnet build и dotnet run .
В Терминале Visual Studio Code (Ctrl-`) выполните команду dotnet restore , чтобы восстановить зависимости проекта (если не сделали этого раньше). Другой способ — выполнить команду Ctrl-Shift-P в Visual Studio Code и затем ввести dot, как показано ниже (у меня почему-то не заработало):
Для тех, кто только приступает к использованию Visual Studio Code (или Code, для краткости), следует заметить, что данный продукт не только имеет удобный, простой и отзывчивый интерфейс, обеспечивающий быструю работу с файлами, но он также предоставляет инструменты для наиболее эффективного написания кода.
- Explore
- Search
- Git
- Debug
- Extensions
Code интегрируется с Git, если он установлен на вашем компьютере. При помощи Git viewlet можно создавать новые репозитории, подтверждать изменение кода, отправлять изменения.
Debug viewlet поддерживает интерактивную отладку приложений.
Кроме того, в редакторе Code есть множество замечательных функций. Вы увидите, что неиспользованные операторы using будут подчеркнуты и могут быть удалены автоматически при помощи Сtrl-. , если значок лампочки отображается на экране. Также можно видеть, сколько ссылок на классы и методы есть в проекте. Если вы переходить с Visual Studio, то вы можете использовать многие знакомые сочетания клавиш, например, Сtrl-K+C , чтобы закомментировать блок кода или Ctrl-K-U , чтобы раскомментировать его.
Запуск приложения при помощи Kestrel
Создаем проект с помощью CLI
Открываем папку, где хотим создать решение и выполняем следующую команду в cmd:
После создадим пустой веб проект с помощью команды:
Теперь добавим новый проект, который мы создали в наш sln
Конфигурация приложения
Когда все готово, откроем наш проект с помощью VS Code. Создадим наш первый контроллер, для этого добавим папку:
И добавим апи контроллер:
Как видим, с записей в консоли, проект успешно запущен на 5000 порту, давайте откроем его в браузере:
Браузер нам вывел Hello World! на экран
Если мы посмотрим в стандартный Startup класс, который сгенерировал CLI
То увидим, что у нас есть стандартная обработка / роута.
Окей, теперь нам нужно оживить наш проект, давайте добавим использование AddMvcCore сервиса.
Остановим наш аппликейшин, для этого достаточно нажать ctrl + c в терминале VS Code
Подключим нужные nuget пакеты, а именно Microsoft.AspNetCore.All, Microsoft.AspNetCore.Mvc.NewtonsoftJson
И добавим фильтр для автоматической проверки ModelState и возврата BadRequest, в случае если ModelState.IsValid = false .
Модифицируем Program класс
И Startup.cs, который будет выглядеть следующим образом:
Запускаем проект и тестируем наш API. Для этого откроем postman и сделаем запрос на наш Endpoint:
Отлично. как видите. мы получили ответ с нужным статус кодом.
Docker
Теперь давайте "обернем" наш проект в докер контейнер.
Для этого создадим DockerFile с следующим содержимым:
Так как мы будем запускать контейнеры в Linux, убедитесь, что вы перевели ваш docker в линукc режим
Теперь сбилдим наше локальное приложение с помощью команды
(или docker build -t iplookup ./webapi если вы находитесь в корневой папке)
Обратите внимание, точка указывает на то, что Dockerfile находиться в той же директории, где вы запускаете команду. Когда я первый раз работал с докером, не мог понять, что же не так с командой, оказалось что я просто удалял эту точку, когда копировал команду, думая что она не нужна.
Теперь запустим наше приложение и выполним команду для просмотра активных контейнеров
После выполнения команд, должна появиться следующая информация в консоли:
И если мы откроем Docker плагин в VS code, то увидим что должен появиться новый контейнер и image:
Как видим, результат тот же, как и в случае с обычным дебагом через dotnet run
Проект, который использовался в статье можно скачать тут.
В следующей статье мы рассматриваем как подключить MongoDB к нашему проекту и разберемся что такое docker compose.
Модели
Классы модели позволяют отображать данные в вашей базе данных. Класс модели обычно состоит из атрибутов вместе с их «получателями» и «установщиками». Атрибуты — это, по сути, данные, для которых должен иметь значение любой экземпляр этого класса модели.
Количество классов моделей и типов атрибутов в этих классах моделей зависит от требований вашего приложения. Например, приложение, которое управляет данными сотрудника может иметь класс модели Employeeс атрибутами name, department и rankпотому, что эти атрибуты применяются ко всем сотрудникам.
Контроллеры
В контроллерах также реализована инъекция зависимостей, которая устанавливает соединение между контроллерами и контекстом вашей базы данных. Это позволяет вам через use _contextвесь класс контроллера получить доступ к вашей базе данных без необходимости инициализировать какой-либо объект.
Методы внутри контроллера называются «методами действия», поскольку они возвращают «результат действия». Имя метода действия используется для сопоставления его конечной точки URL. Например, если имя контроллера — UserController, а имя метода действия — Details, то существует конечная точка URL-адреса, к /Users/Details/которой можно получить доступ, и которая запустит метод действия Details.
Фреймворк извлекает маршрут из имени контроллера. Например, если имя контроллера UsersController, ваш маршрут будет /Users. URL-адрес формы Controller1/Method1соответствует методу, указанному Method1в Controller1 class. Если имя метода класса Users SignUp(), то маршрут будет /Users/SignUp/. Метод действия по умолчанию, срабатывающий, когда пользователь обращается к URL-адресу контроллера, — Index(). Это выполняет поведение, заданное в Index.cshtmlфайле в папке представлений.
Взгляды
/Views/- это буква «V» в MVC. /Views/Папка содержит все файлы, которые будут использоваться для отображения пользовательского интерфейса к пользователю, что они могут взаимодействовать. По умолчанию в этой папке есть ещё две папки: /Home/и /Shared/. Оба Index.cshtmlи _Layout.cshtmlпапки в основном отвечают за ваш вывод.
Созданные представления соответствуют методам действий вашего контроллера. Например, у Index()метода есть вызываемое отображаемое представление, Index.cshtmlа у Create()метода есть вызываемое представление Create.cshtmlи так далее. Файлы в папке Views, которые используют методы или данные из моделей, должны иметь объявление модели в начале, которое позволяет вам получить доступ к атрибутам указанного класса модели.
В этом случае вы можете читать и извлекать данные и атрибуты из Userклассов. Самый простой запрос просмотра — это запрос атрибута. Это позволяет вам считывать значение атрибута из парного класса модели.
Вот пример Index.cshtmlфайла в представлениях, который отображает простой текст. Поскольку он не вызывает никаких методов и не использует какие-либо данные модели, нам не нужно связывать модель в начале.
Характеристики
В /Properties/папке находится launchSettings.json файл. Этот файл сообщает платформе, как запустить это приложение.
/Startup.cs и /Program.cs
Читайте также: