Asp net core что это
Перейти к содержимому

Asp net core что это

Путь ASP.NET Core [уровень 1] Основы

ASP.NET Core — новейший фреймворк для кроссплатформенной веб разработки. Пока его популярность (как и количество вакансий) только начинает набирать обороты самое время узнать о нем побольше. Ну а для того, чтобы все знания не испарились сразу после прочтения — добавим существенную практическую часть. Создадим простое приложение, для тестирования прочитанного.

Если вы считаете, что уже достаточно круты в новом фреймворке — можете попробовать пройти тест до того, как прочтете статью. Линк. Весь код проекта можно посмотреть на гитхабе.

Первая часть включает:

  • Что такое .NET Core и ASP.NET Core?
  • Основы создания приложения и его структура
  • Добавление новых элементов, скаффолдинг
  • Основы встроенного Dependency Injection
  • Деплоймент в Azure
  • С открытым исходным кодом
  • Кроссплатформенная
  • Гибкая в установке — может быть внутри приложения и можно поставить несколько версий на одной и той же машине
  • Все сценарии работы поддерживаются с помощью консольных инструментов

В чем же тогда особенности и отличия ASP.NET Core от предыдущего ASP.NET? Некоторые из них это:

  • Возможность намного лучше контролировать нужные модули, сборки. Например, нет жесткой привязки к IIS, System.Web.dll
  • Встроенный функционал для внедрения зависимостей
  • Открытый исходный код

Класс Statup можно, в какой-то степени, охарактеризовать как новый вариант Global.asax (Это класс для глобальной настройки всего приложения в предыдущей версии ASP.NET). Грубо говоря, можно сказать, что метод ConfigureServices нужен для конфигурации контейнера для внедрения зависимостей и его сервисов, а метод Configure для конфигурации конвейера обработки запросов.

Приступим к практической реализации

Для того, чтобы лучше понять все новшества, создадим ASP.NET Core приложение на основе .NET Core.

Чтобы облегчить себе жизнь, выберем Web Application и поменяем аутентификацию на Individual User Accounts. Таким образом Visual Studio уже сгенерирует весь нужный код для базового приложения.

Рассмотрим детальней что же нового появилось в ASP.NET Core. С точки зрения разработки вся концепция осталась прежней. Структура проекта базируется на паттерне MVC. Для работы с данными по умолчанию используем Entity Framework, логика описана в классах-контроллерах, на уровне представлений используем синтаксис cshtml + новая фишка tag helpers.

Проверим классы Program.cs и Startup.cs, они действительно выглядят такими же, как было описано выше. Конечно класс Startup не совсем пуст, а уже вмещает функционал для считывания конфигурации, настройки базового логирования, маршрутизации и привязку на нашу модель базы данных.

Дополним модель базы данных сущностями для создания и прохождения тестов. Будем использовать следующие сущности: Набор тестовых вопросов — TestPackage, Сам вопрос (тест) — TestItem, Результат теста — TestResult. Пример можно посмотреть тут. Радует, что EntityFramework Core уже поддерживает большинство функционала и можно полноценно пользоваться Code First миграциями.

Добавляем логику

Теперь, когда у нас есть модель базы данных, мы можем приступить к созданию логики для нашего приложения. Самый простой способ создания админки — это механизм scaffolding. Для этого, кликаем правой кнопкой мыши по папке контроллеров и выбираем Add → New Scaffold Item:

Выбираем «MVC Controller с представлениями, с использованием Entity Framework». Этот шаблон позволяет нам быстро создать контроллер и вьюхи для управления одной конкретной моделью. Проделаем такой трюк для TestPackage и TestItem. В результате у нас есть готовый прототип админки для нашей системы. Можно запустить проект и зайти на страницы этих контроллеров, просто добавить его имя без слова Controller в конец адреса, например, /testpackages. Конечно в ней еще не все идеально, поэтому нужно допилить некоторые моменты и сделать их более удобными.

После создания модели и простого функционала для работы с ней, можно перейти к самому процессу прохождения тестов. В общем, все выглядит просто. Сервер присылает вопрос, варианты, мы отсылаем назад ответ. Сервер сохраняет его. В конце теста показываем результат. Добавим код для этого поведения.

В общем, все что нужно для теста у нас есть.

Основы Dependency Injection в ASP.NET Core

Важным новшеством новой версии ASP.NET так же является встроенный механизм внедрения зависимостей. В 2016 году уже никого не удивишь тем, что механизм внедрения зависимостей можно перенести внутрь фреймворка. Мало какое серьёзное приложение пишут без использование этого подхода. DI в ASP.NET Core реализован достаточно базово, но в то же время позволяет решить большинство задач управления зависимостями.

Конфигурация контейнера осуществляется в методе ConfigureServices класса Startup. Пример:

Можно заметить, что для контекста базы данных и Identity фреймворка есть дополнительные, не типичные методы их регистрации. Это позволяет более гибко их сконфигурировать. В этот подход регистрации сервисов очень красиво вписываются extension-методы.

После регистрации сервисов, самый легкий способ получить из в коде (например, в контроллерах) — это просто добавить параметр конструктора типа, который был зарегистрирован. Такие контроллеры по умолчанию создаются скаффолдингом.

Деплой

Одним из самых простых способов деплоймента остается Microsoft Azure. Нам достаточно самых базовых настроек для полноценной работы. Развертывание сайта на сервере все так же просто — с помощью нескольких кликов, начиная с контекстного меню на файле проекта.

Выводы

Пока не известно будущее «классического» .NET фреймворка, так как он, все же, является более стабильным и проверенным, поэтому может существовать еще довольно долго (привет, Python 2), хотя возможна и ситуация быстрой миграции большинства девелоперов на Core версии (не такой уже .NET и старый — 14 лет всего лишь).

Общие сведения об ASP.NET Core

ASP.NET Core является кроссплатформенной, высокопроизводительной средой с открытым исходным кодом для создания современных облачных приложений, подключенных к Интернету.

ASP.NET Core позволяет выполнять следующие задачи:

  • Создавать веб-приложения и службы, приложения Интернета вещей (IoT) и серверные части для мобильных приложений.
  • Использовать избранные средства разработки в Windows, macOS и Linux.
  • Выполнять развертывания в облаке или локальной среде.
  • Запускать в .NET Core.

Преимущества, обеспечиваемые ASP.NET Core

Миллионы разработчиков использовали и продолжают использовать ASP.NET 4.x для создания веб-приложений. ASP.NET Core — это модификация ASP.NET 4.x с архитектурными изменениями, формирующими более рациональную и более модульную платформу.

ASP.NET Core предоставляет следующие преимущества:

  • Единое решение для создания пользовательского веб-интерфейса и веб-API.
  • Разработано для тестируемости. упрощает написание кода для сценариев страниц и повышает его эффективность. позволяет использовать в браузере язык C# вместе с JavaScript. совместное использование серверной и клиентской логик приложений, написанных с помощью .NET;
  • Возможность разработки и запуска в ОС Windows, macOS и Linux.
  • Открытый исходный код и ориентация на сообщество.
  • Интеграция современных клиентских платформ и рабочих процессов разработки.
  • Поддержка размещения служб удаленного вызова процедур (RPC) с помощью gRPC.
  • Облачная система конфигурации на основе среды.
  • Встроенное введение зависимостей.
  • Упрощенный высокопроизводительный модульный конвейер HTTP-запросов.
  • Следующие возможности размещения:

Создание веб-API и пользовательского веб-интерфейса с помощью ASP.NET Core MVC

ASP.NET Core MVC предоставляет функции, которые позволяют создавать веб-интерфейсы API и веб-приложения.

    помогает сделать веб-API и веб-приложения тестируемыми. — это основанная на страницах модель программирования, которая упрощает и повышает эффективность создания пользовательского веб-интерфейса. предоставляет эффективный синтаксис для страниц Razor Pages и представлений MVC. позволяют серверному коду участвовать в создании и отображении HTML-элементов в файлах Razor.
  • Благодаря встроенной поддержке нескольких форматов данных и согласованию содержимого веб-API становятся доступными для множества клиентов, включая браузеры и мобильные устройства. автоматически сопоставляет данные из HTTP-запросов с параметрами методов действия. автоматически выполняется на стороне сервера и клиента.

Клиентская разработка

ASP.NET Core легко интегрируется с распространенными клиентскими платформами и библиотеками, в том числе Blazor, Angular, React и Bootstrap. Подробнее см. в статье ASP .NET CoreBlazor и сопутствующих материалах в разделе Разработка на стороне клиента.

Целевые версии платформы ASP.NET Core

ASP.NET Core 3.x и более поздние версии может выполняться только в .NET Core. Как правило, ASP.NET Core состоит из библиотек .NET Standard. Библиотеки, написанные на .NET Standard 2.0 под управлением любой платформы .NET с реализацией .NET Standard 2.0.

При использовании .NET Core существуют некоторые преимущества, и их число увеличивается с каждым выпуском. Преимущества .NET Core по сравнению с .NET Framework включают:

  • Кроссплатформенность. Выполняется в Windows, macOS и Linux.
  • Повышение производительности
  • Новые интерфейсы API
  • Открытый код

Рекомендуемая схема обучения

Для знакомства с разработкой приложений ASP.NET Core рекомендуется изучить следующую последовательность учебников.

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

Пройдите учебник, посвященный основам доступа к данным.

Ознакомьтесь с обзором основ ASP.NET Core, относящихся ко всем типам приложений.

Просмотрите содержание, чтобы найти другие интересующие вас темы.

†Доступен интерактивный учебник по веб-API. Локальная установка средств разработки не требуется. Код выполняется в Azure Cloud Shell в браузере, а для тестирования используется curl.

Миграция с .NET Framework

Справочное руководство по миграции приложений ASP.NET 4.х на ASP.NET Core см. в статье Миграция с ASP.NET на ASP.NET Core.

ASP.NET Core является кроссплатформенной, высокопроизводительной средой с открытым исходным кодом для создания современных облачных приложений, подключенных к Интернету. ASP.NET Core позволяет выполнять следующие задачи:

  • Создавать веб-приложения и службы, приложения Интернета вещей (IoT) и серверные части для мобильных приложений.
  • Использовать избранные средства разработки в Windows, macOS и Linux.
  • Выполнять развертывания в облаке или локальной среде.
  • Работать в .NET Core или .NET Framework.

Преимущества, обеспечиваемые ASP.NET Core

Миллионы разработчиков использовали и продолжают использовать ASP.NET 4.x для создания веб-приложений. ASP.NET Core — это модификация ASP.NET 4.x с архитектурными изменениями, формирующими более рациональную и более модульную платформу.

ASP.NET Core предоставляет следующие преимущества:

  • Единое решение для создания пользовательского веб-интерфейса и веб-API.
  • Разработано для тестируемости. упрощает написание кода для сценариев страниц и повышает его эффективность. позволяет использовать в браузере язык C# вместе с JavaScript. совместное использование серверной и клиентской логик приложений, написанных с помощью .NET;
  • Возможность разработки и запуска в ОС Windows, macOS и Linux.
  • Открытый исходный код и ориентация на сообщество.
  • Интеграция современных клиентских платформ и рабочих процессов разработки.
  • Поддержка размещения служб удаленного вызова процедур (RPC) с помощью gRPC.
  • Облачная система конфигурации на основе среды.
  • Встроенное введение зависимостей.
  • Упрощенный высокопроизводительный модульный конвейер HTTP-запросов.
  • Следующие возможности размещения:

Создание веб-API и пользовательского веб-интерфейса с помощью ASP.NET Core MVC

ASP.NET Core MVC предоставляет функции, которые позволяют создавать веб-интерфейсы API и веб-приложения.

    помогает сделать веб-API и веб-приложения тестируемыми. — это основанная на страницах модель программирования, которая упрощает и повышает эффективность создания пользовательского веб-интерфейса. предоставляет эффективный синтаксис для страниц Razor Pages и представлений MVC. позволяют серверному коду участвовать в создании и отображении HTML-элементов в файлах Razor.
  • Благодаря встроенной поддержке нескольких форматов данных и согласованию содержимого веб-API становятся доступными для множества клиентов, включая браузеры и мобильные устройства. автоматически сопоставляет данные из HTTP-запросов с параметрами методов действия. автоматически выполняется на стороне сервера и клиента.

Клиентская разработка

ASP.NET Core легко интегрируется с распространенными клиентскими платформами и библиотеками, в том числе Blazor, Angular, React и Bootstrap. Подробнее см. в статье ASP .NET CoreBlazor и сопутствующих материалах в разделе Разработка на стороне клиента.

ASP.NET Core для платформы .NET Framework

Приложения ASP.NET Core 2.x могут выполняться в .NET Core или .NET Framework. Приложения ASP.NET Core, предназначенные для .NET Framework, не являются кроссплатформенными — они выполняются только в Windows. Как правило, ASP.NET Core 2.x состоит из библиотек .NET Standard. Библиотеки, написанные на .NET Standard 2.0 под управлением любой платформы .NET с реализацией .NET Standard 2.0.

ASP.NET Core 2.x поддерживается в версиях .NET Framework с реализацией .NET Standard 2.0:

  • Рекомендуется использовать последнюю версию .NET Framework.
  • .NET Framework 4.6.1 и более поздних версий.

ASP.NET Core версии 3.0 и более поздних будут выполняться только в .NET Core. Дополнительные сведения об этом изменении см. в разделе Первое знакомство с предстоящими изменениями в ASP.NET Core 3.0.

При использовании .NET Core существуют некоторые преимущества, и их число увеличивается с каждым выпуском. Преимущества .NET Core по сравнению с .NET Framework включают:

  • Кроссплатформенность. Выполняется на macOS, Linux и Windows.
  • Повышение производительности
  • Новые интерфейсы API
  • Открытый код

Благодаря пакету обеспечения совместимости Windows в .NET Core доступны тысячи API-интерфейсов, созданных только для Windows, что позволяет расширить диапазон API при переходе с .NET Framework на .NET Core. Эти API-интерфейсы не были доступны в .NET Core 1.x.

Рекомендуемая схема обучения

Для знакомства с разработкой приложений ASP.NET Core рекомендуется изучить следующую последовательность учебников и статей.

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

Пройдите учебник, посвященный основам доступа к данным.

Ознакомьтесь с обзором основ ASP.NET Core, относящихся ко всем типам приложений.

Просмотрите содержание, чтобы найти другие интересующие вас темы.

†Доступен новый учебник по веб-API с прохождением в браузере, не требующий установки локальной интегрированной среды разработки. Код выполняется в Azure Cloud Shell, а для тестирования используется curl.

Миграция с .NET Framework

Справочное руководство по миграции приложений ASP.NET на ASP.NET Core см. в статье Миграция с ASP.NET на ASP.NET Core.

Загрузка примера

Многие статьи и учебники содержат ссылки на примеры кода.

    .
  1. Распакуйте файл AspNetCore.Docs-main.zip .
  2. Чтобы получить доступ к примеру приложения из статьи в распакованном репозитории, используйте URL-адрес примера ссылки из статьи для перехода к папке примера. Как правило, пример ссылки из статьи отображается в ее верхней части. Текст ссылки: Просмотрите или загрузите пример кода.

Директивы препроцессора в примере кода

Для демонстрации нескольких сценариев в примерах приложений используются директивы препроцессора #define и #if-#else/#elif-#endif , выборочно компилирующие и запускающие разные фрагменты примеров кода. В примерах, где применяется этот подход, задайте в начале файлов C# директиву #define для определения символа, связанного со сценарием, который нужно запустить. Для запуска сценария в некоторых примерах потребуется определить символ в начале нескольких файлов.

Например, в следующем списке символов #define видно, что доступно четыре сценария (один сценарий на символ). В текущем примере конфигурации запускается сценарий TemplateCode :

Чтобы запустить в примере сценарий ExpandDefault , задайте символ ExpandDefault и оставьте остальные символы раскомментированными:

Дополнительные сведения об использовании директив препроцессора C# для выборочной компиляции фрагментов кода см. в разделах #define (Справочник по C#) и #if (Справочник по C#).

Регионы в примере кода

Некоторые примеры приложений содержат фрагменты кода внутри директив C# #region и #endregion. Система сборки документации вставляет эти регионы в обработанные разделы документации.

Имена регионов обычно содержат слово «фрагмент». В следующем примере показан регион с именем snippet_WebHostDefaults :

На предыдущий фрагмент кода C# указывает ссылка в следующей строке в файле Markdown раздела:

Вы можете спокойно проигнорировать или удалить директивы #region и #endregion вокруг кода. Не изменяйте код внутри этих директив, если планируете запустить примеры сценариев, описанные в разделе. Вы можете изменить код, экспериментируя с другими сценариями.

Критические изменения и советы по безопасности

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

ASP.NET Core, основы, обзор

В этой статье представлены основные этапы создания приложений ASP.NET Core, включая внедрение зависимостей (DI), конфигурацию, ПО промежуточного слоя и многое другое.

Program.cs

Приложения ASP.NET Core, созданные на основе веб-шаблонов, содержат код запуска приложения в файле Program.cs . В файле Program.cs :

  • Настраиваются службы, необходимые приложению.
  • Конвейер обработки запросов приложения определен как ряд компонентов ПО промежуточного слоя.

Следующий код запуска приложения поддерживает:

Введение зависимостей (службы)

ASP.NET Core включает внедрение зависимостей, позволяющее обращаться к настроенным службам в рамках приложения. Службы добавляются в контейнер внедрения зависимостей с помощью WebApplicationBuilder.Services, builder.Services в предыдущем коде. При создании экземпляра WebApplicationBuilder добавляется множество предоставляемых платформой служб. builder — это WebApplicationBuilder в приведенном ниже коде:

В приведенном выше код builder добавляет в контейнер внедрения зависимостей конфигурацию, ведение журнала и множество других служб.

Следующий код добавляет в контейнер внедрения зависимостей Razor Pages, контроллеры MVC с представлениями и настраиваемый DbContext:

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

В следующем коде используется внедрение конструктора для решения контекста базы данных и средство ведения журнала из внедрения зависимостей:

ПО промежуточного слоя

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

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

При запуске приложение ASP.NET Core создает узел. Узел инкапсулирует все ресурсы приложения:

  • Реализация HTTP-сервера
  • Компоненты ПО промежуточного слоя
  • Ведение журнала
  • Службы внедрения зависимостей
  • Параметр Configuration

Существует три разных узла:

  • Узел веб-приложений.NET.
  • Универсальный узел .NET
  • Веб-узел ASP.NET Core

Рекомендуется минимальный узел .NET, который используется во всех шаблонах ASP.NET Core. Минимальный и универсальный узлы используют множество одинаковых интерфейсов и классов. Веб-узел ASP.NET Core доступен только для обеспечения обратной совместимости.

В следующем примере создается экземпляр узла веб-приложений:

Метод WebApplicationBuilder.Build настраивает узел с параметрами по умолчанию, например с такими:

  • Используйте Kestrel в качестве веб-сервера и включите интеграцию IIS.
  • Загрузка конфигурации из файла appsettings.json , переменных среды, аргументов командной строки и других источников конфигураций.
  • Отправка выходных данных журнала в поставщики служб консоли и отладки.

Сценарии, не связанные с Интернетом

Универсальный узел позволяет приложениям других типов использовать перекрестные расширения платформ, такие как средства ведения журналов, внедрения зависимостей, настройки и управления жизненным циклом. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core и Фоновые задачи с размещенными службами в ASP.NET Core.

Серверы

Приложение ASP.NET Core использует реализацию HTTP-сервера для приема HTTP-запросов. Сервер отправляет приложению запросы в виде набора функций запросов, объединенных в HttpContext .

  • Windows
  • macOS
  • Linux

ASP.NET Core предоставляет следующие реализации серверов:

  • Kestrel представляет собой кроссплатформенный веб-сервер. Kestrel зачастую запускается в конфигурации обратного прокси с использованием службы IIS. В ASP.NET Core 2.0 или более поздних версиях Kestrel может быть запущен как общедоступный пограничный сервер, напрямую подключенный к Интернету.
  • HTTP-сервер IIS — это сервер для Windows, который использует службы IIS. Он позволяет запускать приложение ASP.NET Core и службы IIS в одном процессе.
  • HTTP.sys — это сервер для Windows, который не используется со службами IIS.

ASP.NET Core обеспечивает реализацию кроссплатформенного сервера Kestrel . В ASP.NET Core 2.0 или более поздней версии Kestrel может работать в качестве общедоступного пограничного сервера, подключенного напрямую к сети Интернет. Kestrel зачастую запускается в конфигурации обратного прокси с Nginx или Apache.

ASP.NET Core обеспечивает реализацию кроссплатформенного сервера Kestrel . В ASP.NET Core 2.0 или более поздней версии Kestrel может работать в качестве общедоступного пограничного сервера, подключенного напрямую к сети Интернет. Kestrel зачастую запускается в конфигурации обратного прокси с Nginx или Apache.

Конфигурация

ASP.NET Core предоставляет платформу конфигурации, которая получает параметры в виде пар «имя-значение» от упорядоченного набора поставщиков конфигурации. Доступны встроенные поставщики конфигурации для различных источников, таких как файлы .json , .xml , переменные среды и аргументы командной строки. Для поддержки других источников можно создать настраиваемые поставщики конфигурации.

По умолчанию приложения ASP.NET Core настроены для чтения из файла appsettings.json , переменных среды, командной строки и т. д. При загрузке конфигурации приложения значения из переменных среды переопределяют значения из файла appsettings.json .

Для управления конфиденциальными данными конфигурации, например паролями, .NET Core предоставляет диспетчер секретов. Для секретов в рабочей среде рекомендуется использовать Azure Key Vault.

Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.

Среды

Среды выполнения, такие как Development , Staging и Production , доступны в ASP.NET Core. Указать среду, в которой запускается приложение, можно с помощью переменной среды ASPNETCORE_ENVIRONMENT . ASP.NET Core считывает переменную среды при запуске приложения и сохраняет ее значение в реализации IWebHostEnvironment . Эта реализация доступна в любом месте приложения посредством внедрения зависимостей.

В следующем примере выполняется настройка обработчика исключений и ПО промежуточного слоя протокола HTTP Strict Transport Security Protocol (HSTS) при выполнении НЕ в среде Development :

Ведение журнала

ASP.NET Core поддерживает API ведения журналов, который работает с разными встроенными и сторонними поставщиками. Доступные следующие поставщики:

  • Консоль
  • Отладка
  • Трассировка событий Windows
  • Журнал событий Windows
  • TraceSource
  • Служба приложений Azure
  • Azure Application Insights

Для создания журналов необходимо разрешить службу ILogger<TCategoryName> из системы внедрения зависимостей (DI) и вызвать методы ведения журналов, такие как LogInformation. Пример:

Маршрутизация

Маршрут — это шаблон URL-адреса, сопоставляемый с обработчиком. Обычно обработчик представляет собой страницу Razor, метод действия в контроллере MVC или ПО промежуточного слоя. Маршрутизация ASP.NET Core позволяет контролировать URL-адреса, используемые приложением.

Следующий код, созданный шаблоном веб-приложения ASP.NET Core, вызывает UseRouting:

Дополнительные сведения см. в статье Маршрутизация в ASP.NET Core.

Обработка ошибок

ASP.NET Core содержит встроенные функции обработки ошибок, такие как:

  • Страница исключений для разработчика
  • Настраиваемые страницы ошибок
  • Статические страницы с кодами состояния
  • Обработка исключений при запуске

Дополнительные сведения см. в статье Обработка ошибок в ASP.NET Core.

Создание HTTP-запросов

ASP.NET Core включает реализацию интерфейса IHttpClientFactory для создания экземпляров HttpClient . Фабрика:

  • Центральное расположение для именования и настройки логических экземпляров HttpClient . Например, можно зарегистрировать и использовать клиент github для доступа к сайту GitHub. Можно зарегистрировать и настроить клиент по умолчанию для других целей.
  • Поддержка регистрации и связывания в цепочки множества делегирующих обработчиков для создания конвейера ПО промежуточного слоя под исходящие запросы. Этот шаблон похож на входящий конвейер ПО промежуточного слоя для ASP.NET Core. Шаблон предоставляет механизм управления сквозной функциональностью HTTP-запросов, включая кэширование, обработку ошибок, сериализацию и ведение журнала.
  • Интеграция с Polly — популярной сторонней библиотекой для обработки временных сбоев.
  • Управление созданием пулов и временем существования базовых экземпляров HttpClientHandler с целью избежать обычных проблем с DNS, которые возникают при управлении временем существования HttpClient вручную.
  • Настройка параметров ведения журнала (через ILogger) для всех запросов, отправленных через клиентов, созданных фабрикой.

Корневой каталог содержимого

Корневой каталог содержимого — это базовый путь к следующим элементам:

  • Исполняемый файл, в котором размещено приложение (EXE).
  • Скомпилированные сборки, составляющие приложение (DLL).
  • Файлы содержимого, используемые приложением, например:
    • Файлы Razor ( .cshtml , .razor )
    • Файлы конфигурации ( .json , .xml )
    • Файлы данных ( .db )

    Во время развертывания корень содержимого по умолчанию сбрасывается до корневого каталога проекта. Этот каталог является базовым путем к файлам содержимого приложения и корневому веб-каталогу. Альтернативный корневой путь к содержимому может быть указан при создании узла. Дополнительные сведения: Корень содержимого.

    Корневой веб-узел

    Корневой веб-каталог — это базовый путь к общедоступным файлам статических ресурсов, например:

    • Таблицы стилей ( .css )
    • JavaScript ( .js )
    • Изображения ( .png , .jpg )

    По умолчанию статические файлы обслуживаются только в корневом веб-каталоге и его подкаталогах. По умолчанию используется путь /wwwroot. Альтернативное расположение корневого веб-каталога можно указать при создании узла. Дополнительные сведения см. в разделе Корневой веб-каталог.

    Запретите публикацию файлов в wwwroot с помощью элемента проекта <Content> в файле проекта. В следующем примере запрещается публикация содержимого в каталоге wwwroot/local и его подкаталогах:

    В файлах Razor .cshtml

    / указывает на корневой каталог. Путь, начинающийся с

    / , называется виртуальным путем.

    Дополнительные ресурсы

    В этой статье представлены основные этапы создания приложений ASP.NET Core, включая внедрение зависимостей (DI), конфигурацию, ПО промежуточного слоя и многое другое.

    Класс Startup

    В классе Startup делается следующее.

    • Настраиваются службы, необходимые приложению.
    • Конвейер обработки запросов приложения определен как ряд компонентов ПО промежуточного слоя.

    Пример класса Startup :

    Введение зависимостей (службы)

    ASP.NET Core включает встроенную платформу внедрения зависимостей, позволяющую обращаться к настроенным службам в рамках приложения. Например, службой является компонент ведения журнала.

    Код для настройки (или регистрации) служб добавляется в метод Startup.ConfigureServices . Пример:

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

    В следующем примере показано использование внедрения конструктора для разрешения RazorPagesMovieContext из системы внедрения зависимостей.

    Если встроенный контейнер с инверсией управления (IoC) не удовлетворяет всем потребностям приложения, вместо него можно использовать сторонний контейнер IoC.

    ПО промежуточного слоя

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

    По принятому соглашению компонент ПО промежуточного слоя добавляется в конвейер вызовом метода расширения Use. в методе Startup.Configure . Например, чтобы включить отрисовку статических файлов, вызовите UseStaticFiles .

    В следующем примере показана настройка конвейера обработки запросов.

    ASP.NET Core содержит большой набор встроенного ПО промежуточного слоя. Кроме того, можно создать пользовательские компоненты ПО промежуточного слоя.

    При запуске приложение ASP.NET Core создает узел. Узел инкапсулирует все ресурсы приложения:

    • Реализация HTTP-сервера
    • Компоненты ПО промежуточного слоя
    • Ведение журнала
    • Службы внедрения зависимостей
    • Параметр Configuration

    Существует два различных узла:

    • Универсальный узел .NET
    • Веб-узел ASP.NET Core

    Рекомендуется использовать универсальный узел .NET. Веб-узел ASP.NET Core доступен только для обеспечения обратной совместимости.

    В следующем примере показано создание универсального узла .NET.

    Методы CreateDefaultBuilder и ConfigureWebHostDefaults применяются для настройки узла с набором параметров по умолчанию, например:

    • Используйте Kestrel в качестве веб-сервера и включите интеграцию IIS.
    • Загрузка конфигурации из appsettings.json , appsettings..json , переменных среды, аргументов командной строки и других источников конфигураций.
    • Отправка выходных данных журнала в поставщики служб консоли и отладки.

    Сценарии, не связанные с Интернетом

    Универсальный узел позволяет приложениям других типов использовать перекрестные расширения платформ, такие как средства ведения журналов, внедрения зависимостей, настройки и управления жизненным циклом. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core и Фоновые задачи с размещенными службами в ASP.NET Core.

    Серверы

    Приложение ASP.NET Core использует реализацию HTTP-сервера для приема HTTP-запросов. Сервер отправляет приложению запросы в виде набора функций запросов, объединенных в HttpContext .

    • Windows
    • macOS
    • Linux

    ASP.NET Core предоставляет следующие реализации серверов:

    • Kestrel представляет собой кроссплатформенный веб-сервер. Kestrel зачастую запускается в конфигурации обратного прокси с использованием службы IIS. В ASP.NET Core 2.0 или более поздних версиях Kestrel может быть запущен как общедоступный пограничный сервер, напрямую подключенный к Интернету.
    • HTTP-сервер IIS — это сервер для Windows, который использует службы IIS. Он позволяет запускать приложение ASP.NET Core и службы IIS в одном процессе.
    • HTTP.sys — это сервер для Windows, который не используется со службами IIS.

    ASP.NET Core обеспечивает реализацию кроссплатформенного сервера Kestrel . В ASP.NET Core 2.0 или более поздней версии Kestrel может работать в качестве общедоступного пограничного сервера, подключенного напрямую к сети Интернет. Kestrel зачастую запускается в конфигурации обратного прокси с Nginx или Apache.

    ASP.NET Core обеспечивает реализацию кроссплатформенного сервера Kestrel . В ASP.NET Core 2.0 или более поздней версии Kestrel может работать в качестве общедоступного пограничного сервера, подключенного напрямую к сети Интернет. Kestrel зачастую запускается в конфигурации обратного прокси с Nginx или Apache.

    Параметр Configuration

    ASP.NET Core предоставляет платформу конфигурации, которая получает параметры в виде пар «имя-значение» от упорядоченного набора поставщиков конфигурации. Доступны встроенные поставщики конфигурации для различных источников, таких как файлы .json , .xml , переменные среды и аргументы командной строки. Для поддержки других источников можно создать настраиваемые поставщики конфигурации.

    По умолчанию приложения ASP.NET Core настроены для чтения из файла appsettings.json , переменных среды, командной строки и т. д. При загрузке конфигурации приложения значения из переменных среды переопределяют значения из файла appsettings.json .

    Предпочтительный способ чтения связанных значений конфигурации — использование шаблона параметров. Дополнительные сведения см. в статье Привязка иерархических данных конфигурации с помощью шаблона параметров.

    Для управления конфиденциальными данными конфигурации, например паролями, .NET Core предоставляет диспетчер секретов. Для секретов в рабочей среде рекомендуется использовать Azure Key Vault.

    Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.

    Среды

    Среды выполнения, такие как Development , Staging и Production , являются ключевыми компонентами ASP.NET Core. Указать среду, в которой запускается приложение, можно с помощью переменной среды ASPNETCORE_ENVIRONMENT . ASP.NET Core считывает переменную среды при запуске приложения и сохраняет ее значение в реализации IWebHostEnvironment . Эта реализация доступна в любом месте приложения посредством внедрения зависимостей.

    В следующем примере показана настройка приложения для предоставления подробных сведений об ошибке при выполнении в среде Development .

    Ведение журнала

    ASP.NET Core поддерживает API ведения журналов, который работает с разными встроенными и сторонними поставщиками. Доступные следующие поставщики:

    • Консоль
    • Отладка
    • Трассировка событий Windows
    • Журнал событий Windows
    • TraceSource
    • Служба приложений Azure
    • Azure Application Insights

    Для создания журналов необходимо разрешить службу ILogger<TCategoryName> из системы внедрения зависимостей (DI) и вызвать методы ведения журналов, такие как LogInformation. Пример:

    Методы ведения журналов, такие как LogInformation , поддерживают любое количество полей. Как правило, эти поля используются для создания сообщения string , но некоторые поставщики ведения журналов отправляют их в хранилище данных в виде отдельных полей. Благодаря этому поставщики могут реализовывать семантическое (структурированное) ведение журналов.

    Маршрутизация

    Маршрут — это шаблон URL-адреса, сопоставляемый с обработчиком. Обычно обработчик представляет собой страницу Razor, метод действия в контроллере MVC или ПО промежуточного слоя. Маршрутизация ASP.NET Core позволяет контролировать URL-адреса, используемые приложением.

    Дополнительные сведения см. в статье Маршрутизация в ASP.NET Core.

    Обработка ошибок

    ASP.NET Core содержит встроенные функции обработки ошибок, такие как:

    • Страница исключений для разработчика
    • Настраиваемые страницы ошибок
    • Статические страницы с кодами состояния
    • Обработка исключений при запуске

    Дополнительные сведения см. в статье Обработка ошибок в ASP.NET Core.

    Создание HTTP-запросов

    ASP.NET Core включает реализацию интерфейса IHttpClientFactory для создания экземпляров HttpClient . Фабрика:

    • Центральное расположение для именования и настройки логических экземпляров HttpClient . Например, можно зарегистрировать и использовать клиент github для доступа к сайту GitHub. Можно зарегистрировать и настроить клиент по умолчанию для других целей.
    • Поддержка регистрации и связывания в цепочки множества делегирующих обработчиков для создания конвейера ПО промежуточного слоя под исходящие запросы. Этот шаблон похож на входящий конвейер ПО промежуточного слоя для ASP.NET Core. Шаблон предоставляет механизм управления сквозной функциональностью HTTP-запросов, включая кэширование, обработку ошибок, сериализацию и ведение журнала.
    • Интеграция с Polly — популярной сторонней библиотекой для обработки временных сбоев.
    • Управление созданием пулов и временем существования базовых экземпляров HttpClientHandler с целью избежать обычных проблем с DNS, которые возникают при управлении временем существования HttpClient вручную.
    • Настройка параметров ведения журнала (через ILogger) для всех запросов, отправленных через клиентов, созданных фабрикой.

    Корневой каталог содержимого

    Корневой каталог содержимого — это базовый путь к следующим элементам:

    • Исполняемый файл, в котором размещено приложение (EXE).
    • Скомпилированные сборки, составляющие приложение (DLL).
    • Файлы содержимого, используемые приложением, например:
      • Файлы Razor ( .cshtml , .razor )
      • Файлы конфигурации ( .json , .xml )
      • Файлы данных ( .db )

      Во время развертывания корень содержимого по умолчанию сбрасывается до корневого каталога проекта. Этот каталог является базовым путем к файлам содержимого приложения и корневому веб-каталогу. Альтернативный корневой путь к содержимому может быть указан при создании узла. Дополнительные сведения: Корень содержимого.

      Корневой веб-узел

      Корневой веб-каталог — это базовый путь к общедоступным файлам статических ресурсов, например:

      • Таблицы стилей ( .css )
      • JavaScript ( .js )
      • Изображения ( .png , .jpg )

      По умолчанию статические файлы обслуживаются только в корневом веб-каталоге и его подкаталогах. По умолчанию используется путь /wwwroot. Альтернативное расположение корневого веб-каталога можно указать при создании узла. Дополнительные сведения см. в разделе Корневой веб-каталог.

      Запретите публикацию файлов в wwwroot с помощью элемента проекта <Content> в файле проекта. В следующем примере запрещается публикация содержимого в каталоге wwwroot/local и его подкаталогах:

      Для указания на корневой каталог файлов Razor .cshtml используется символ тильды и косой черты

Добавить комментарий

Ваш адрес email не будет опубликован.