Введение в ASP.NET Core
ASP.NET Core представляет технологию для создания веб-приложений на платформе .NET, развиваемую компанией Microsoft. В качестве языков программирования для разработки приложений на ASP.NET Core используются C# и F#.
История ASP.NET фактически началась с выходом первой версии .NET в начале 2002 года и с тех пор ASP.NET и .NET развивались параллельно: выход новой версии .NET знаменовал выход новой версии ASP.NET, поскольку ASP.NET работает поверх .NET. В то же время изначально ASP.NET была нацелена на работу исключительно в Windows на веб-сервере IIS (хотя благодаря проекту Mono приложения на ASP.NET можно было запускать и на Linux).
Однако 2014 год ознаменовал большие перемены, фактически революцию в развитии платформы: компания Microsoft взяла курс на развитии ASP.NET как кроссплатформенной технологии, которая развивается как opensource-проект. Данное развитие платформы в дальнейшем получило название ASP.NET Core , собственно как ее официально именут Microsoft до сих пор. Первый релиз обновленной платформы увидел свет в июне 2016 года. Теперь она стала работать не только на Windows, но и на MacOS и Linux. Она стала более легковесной, модульной, ее стало проще конфигурировать, в общем, она стала больше отвечать требованиям текущего времени.
Текущая версия ASP.NET Core, которая собственно и будет охвачена в текущем руководстве, вышла вместе с релизом .NET 8 в ноябре 2023 года.
ASP.NET Core теперь полностью является opensource-фреймворком. Все исходные файлы фреймворка доступны на github в репозитории https://github.com/dotnet/aspnetcore/.
Архитектура и модели разработки
Текущую архитектуру платформы ASP.NET Core можно выразить следующим образом:

На самом верхнем уровне располагаются различные модели взаимодействия с пользователем. Это технологии построения пользовательского интерфейса и обработки ввода пользователя, как MVC, Razor Pages, SPA (Single Page Application — одностраничные приложения с использованием Angular, React, Vue) и Balzor. Кроме того, это сервисы в виде встроенных HTTP API, библиотеки SignalR или сервисов GRPC.
Все эти технологии базируются и/или взаимодействуют с чистым ASP.NET Core, который представлен прежде всего различными встроенными компонентами middleware — компонентами, которые применяются для обработки запроса. Кроме того, технологии высшего уровня также взаимодействуют с различными расширениями, которые не являются непосредственной частью ASP.NET Core, как расширения для логгирования, конфигурации и т.д.
И на самом нижнем уровне приложение ASP.NET Core работает в рамках некоторого веб-сервера, например, Kestrel, IIS, библиотеки HTTP.sys.
Это вкратце архитектура платформы, теперь рассмотрим моделей разработки приложения ASP.NET Core:

- Прежде всего это базовый ASP.NET Core , который поддерживает все основные моменты, необходимые для работы соввременного веб-приложения: маршрутизация, конфигурация, логгирования, возможность работы с различными системами баз данных и т.д.. В ASP.NET Core 6 в фреймворк был добавлен так называемый Minimal API — минимизированная упрощенная модель, который еще упростила процесс разработки и написания кода приложения. Все остальные модели разработки работаю поверх базового функционала ASP.NET Core
- ASP.NET Core MVC представляет в общем виде построения приложения вокруг трех основных компонентов — Model (модели), View (представления) и Controller (контроллеры), где модели отвечают за работу с данными, контроллеры представляют логику обработки запросов, а представления определяют визуальную составляющую.
- Razor Pages представляет модель, при котором за обаботку запроса отвечают специальные сущности — страницы Razor Pages. Каждую отдельную такую сущность можно ассоциировать с отдельной веб-страницей.
- ASP.NET Core Web API представляет реализацию паттерна REST, при котором для каждого типа http-запроса (GET, POST, PUT, DELETE) предназначен отдельный ресурс. Подобные ресурсы определяются в виде методов контроллера Web API. Данная модель особенно подходит для одностраничных приложений, но не только.
- Blazor представляет фреймворк, который позволяет создавать интерактивные приложения как на стороне сервера, так и на стороне клиента и позволяет задействовать на уровне браузера низкоуровневый код WebAssembly.
Особенности платформы
- ASP.NET Core работает поверх платформы .NET и, таким образом, позволяет задействовать весь ее функционал.
- В качестве языков разработки применяются языки программирования, поддерживаемые платформой .NET. Официально встроенная поддержка для проектов ASP.NET Core есть у языков C# и F#
- ASP.NET Core представляет кросс-платформенный фреймворк, приложения на котором могут быть развернуты на всех основных популярных операционных системах: Windows, Mac OS, Linux. И таким образом, с помощью ASP.NET Core мы можем как создавать кросс-платформенные приложения на Windows, на Linux и Mac OS, так и запускать на этих ОС.
- Благодаря модульности фреймворка все необходимые компоненты веб-приложения могут загружаться как отдельные модули через пакетный менеджер Nuget.
- Поддержка работы с большинством распространенных систем баз данных: MS SQL Server, MySQL, Postgres, MongoDB
- ASP.NET Core характеризуется расширяемостью. Фреймворк построен из набора относительно независимых компонентов. И мы можем либо использовать встроенную реализацию этих компонентов, либо расширить их с помощью механизма наследования, либо вовсе создать и применять свои компоненты со своим функционалом.
- Богатый инструментарий для разработки приложений. В качестве инструментария разработки мы можем использовать такую среду разработки с богатым функционалом, как Visual Studio от компании Microsoft. Также можно использовать для разработки среду Rider от компании JetBrains. Кроме того, имеющаяся оснастка .NET CLI позволяет созадвать и запускать проекты ASP.NET в консоли. И таким образом, для написания кода можно использовать обычных текстовый редактор, например, Visual Studio Code .
Введение в ASP.NET Core
Платформа ASP.NET Core представляет технологию от компании Microsoft, предназначенную для создания различного рода веб-приложений: от небольших веб-сайтов до крупных веб-порталов и веб-сервисов.
С одной стороны, ASP.NET Core является продолжением развития платформы ASP.NET. Но с другой стороны, это не просто очередной релиз. Выход ASP.NET Core фактически означает революцию всей платформы, ее качественное изменение.
Разработка над платформой началась еще в 2014 году. Тогда платформа условно называлась ASP.NET vNext. В июне 2016 года вышел первый релиз платформы. А в ноябре 2020 года вышла версия ASP.NET Core 5.0, которая собственно и будет охвачена в текущем руководстве.
ASP.NET Core теперь полностью является opensource-фреймворком. Все исходные файлы фреймворка доступны на GitHub.
ASP.NET Core может работать поверх кросс-платформенной среды .NET Core, которая может быть развернута на основных популярных операционных системах: Windows, Mac OS, Linux. И таким образом, с помощью ASP.NET Core мы можем создавать кросс-платформенные приложения. И хотя Windows в качестве среды для разработки и развертывания приложения до сих пор превалирует, но теперь уже мы не ограничены только этой операционной системой. То есть мы можем запускать веб-приложения не только на ОС Windows, но и на Linux и Mac OS. А для развертывания веб-приложения можно использовать традиционный IIS, либо кросс-платформенный веб-сервер Kestrel.
Благодаря модульности фреймворка все необходимые компоненты веб-приложения могут загружаться как отдельные модули через пакетный менеджер Nuget. Кроме того, в отличие от предыдущих версий платформы нет необходимости использовать библиотеку System.Web.dll.
ASP.NET Core включает в себя фреймворк MVC, который объединяет функциональность MVC, Web API и Web Pages. В предыдущих версии платформы данные технологии реализовались отдельно и поэтому содержали много дублирующей функциональности. Сейчас же они объединены в одну программную модель ASP.NET Core MVC. А Web Forms полностью ушли в прошлое.
Кроме объединения вышеупомянутых технологий в одну модель в MVC был добавлен ряд дополнительных функций.
Одной из таких функций являются тэг-хелперы (tag helper), которые позволяют более органично соединять синтаксис html с кодом С#.
ASP.NET Core характеризуется расширяемостью. Фреймворк построен из набора относительно независимых компонентов. И мы можем либо использовать встроенную реализацию этих компонентов, либо расширить их с помощью механизма наследования, либо вовсе создать и применять свои компоненты со своим функционалом.
Также было упрощено управление зависимостями и конфигурирование проекта. Фреймворк теперь имеет свой легковесный контейнер для внедрения зависимостей, и больше нет необходимости применять сторонние контейнеры, такие как Autofac, Ninject. Хотя при желании их также можно продолжать использовать.
В качестве инструментария разработки мы можем использовать последние выпуски Visual Studio, начиная с версии Visual Studio 2015. Кроме того, мы можем создавать приложения в среде Visual Studio Code, которая является кросс-платформенной и может работать как на Windows, так и на Mac OS X и Linux.
Для обработки запросов теперь используется новый конвейер HTTP, который основан на компонентах Katana и спецификации OWIN. А его модульность позволяет легко добавить свои собственные компоненты.
Если суммировать, то можно выделить следующие ключевые отличия ASP.NET Core от предыдущих версий ASP.NET:
- Новый легковесный и модульный конвейер HTTP-запросов
- Возможность развертывать приложение как на IIS, так и в рамках своего собственного процесса
- Использование платформы .NET Core и ее функциональности
- Распространение пакетов платформы через NuGet
- Интегрированная поддержка для создания и использования пакетов NuGet
- Единый стек веб-разработки, сочетающий Web UI и Web API
- Конфигурация для упрощенного использования в облаке
- Встроенная поддержка для внедрения зависимостей
- Расширяемость
- Кроссплатформенность: возможность разработки и развертывания приложений ASP.NET на Windows, Mac и Linux
- Развитие как open source, открытость к изменениям
Эти и другие особенности и возможности стали основой для новой модели программирования.
Возможности .NET Core
В последние годы все более популярной становится бесплатная платформа .NET. Она используется многими разработчиками для создания и тестирования приложений, это возможно за счет открытого исходного кода. Одним из вариантов горизонтального увеличения платформы в различные операционные системы стала .NET Core. С ее помощью обеспечивается возможность работы с приложениями, которые разрабатывались для Windows и прочих ОС.
Что это такое

Активное развитие .NET Core стало закономерным итогом работы над приложениями. Одной из главных причин для головной боли практически каждого разработчика являются непредсказуемые условия, в которых будет запускаться та или иная программа. На каждом устройстве используется собственная версия операционной системы, конфигурация, драйверы и т. д., что не всегда позволяет учесть все заранее и сделать приложение рабочим.
Именно по этой причине начались поиска способа унифицировать среду для запуска приложений. И одной из наиболее успешных попыток в этой области можно назвать «Дот Нет», которая была разработана более 20 лет назад компанией Microsoft.
Главная идея ее создания заключалась в том, чтобы добавить специальную программную «прослойку», которая располагалась бы между операционкой и приложением. Именно на эту прослойку были возложены функции сглаживания особенностей конкретной конфигурации ОС, тем самым упрощая запуск программы в имеющейся среде.
Модель .NET активно применяется для разработки приложений следующих видов:
- веб-API и микрослужбы;
- классические и мобильные приложения;
- web-приложения;
- службы «Виндоус»;
- консольные программы и т. д.
Плюс использования платформы заключается в том, что файлы кода и проекта выглядят идентично и не зависят от типа разрабатываемого приложения.
Помимо Windows ОС, платформа dot NET Core также доступна в различных дистрибутивах Linux. Разработчики публикуют новый выпуск практически для всех дистрибутивов «Линукса», почти всегда в них имеется диспетчер пакетов для установки. По этой причине платформа становится все более популярной у программистов и постепенно вытесняет схожие решения.
Начиная с 2016 года было выпущено более 10 версий дополнения. Первые из них назывались .NET Core, однако начиная с 2019 года это название было сокращено до .NET.
Архитектура
.NET Core базируется на архитектуре .NET Framework. Однако есть и несколько кардинальных отличий: например, платформа имеет возможность использования облачных технологий, функционал для кроссплатформенности и модульности. Также в версии Core произошло отделение среды выполнения от библиотеки.
Так как дополнение является модульным, то каждый его компонент обновляется через отдельный менеджер пакетов. Это позволяет обновлять каждый модуль по отдельности. В итоге программа или приложение может работать с отдельными модулями и не зависеть от обновления всей платформы.
Дополнение было разработано корпорацией Microsoft, поэтому является ее собственностью. Однако инструмент был и остается бесплатным для использования.
Удаленный офис
и онлайн-продажи
За 1 день.
С бесплатным тестовым периодом.
Конфигуратор удаленных рабочих мест
Рабочие места для команды за 1 день
Модели развертывания
Одно из основных характеристик «Дот Нет» является гибкое развертывание. Вы можете устанавливать платформу как часть приложения, так и отдельно. При использовании FDD удается уменьшить пакет развертывания, минимизировать использование памяти и дискового пространства.
Развертывание приложений на платформе осуществляется в нескольких режимах:
- При размещении приложения, находящегося в зависимости от платформы, генерируются исполняемые и двоичные файлы, включая ПО и его зависимости. Конечному пользователю для запуска программы необходимо дополнительно запустить среду выполнения. Исполняемый файл напрямую зависит от платформы, а двоичный – DLL – является кроссплатформенным.
- При тестирования автономного приложения используется исполняемый файл, содержащий среду выполнения, библиотеки, а также само ПО и его зависимости. За счет этого пользователи могут открыть программу на устройстве, на котором ранее не устанавливалась среда .NET. Автономные приложения находятся в прямом подчинении у платформы, но при необходимости их можно опубликовать в виде компиляции AOT.
Параллельно возможно использовать разные версии среды для загрузки приложения. Это позволит запускать программы, зависящие от платформы. Исполняемые файлы генерируются для определенной платформы, которые обозначаются специальным идентификатором среды.
Общий код для .NET Core и других платформ

Между платформами, которые базируются на .NET, изначально заложена возможность применения общего кода, так как .NET Core является основой для всех будущих платформ.
Однако возникает вопрос, как этот код работает с платформами, которые базируются на других моделях. Например, при работе с .NET Framework. В этом случае требуется применять переносимые библиотеки классов или общие проекты. Библиотеки подойдут для приложений, общий код которых не завязан на определенные платформы. А для платформ, содержащих специфичный код, завязанный на платформу, подойдут общие проекты.
На сегодня «Дот Нет» поддерживает несколько языков программирования, в том числе C#, F# и Visual Basic .NET.
Кроссплатформенность
Как все знают, в мире существует множество разнообразных ОС, поэтому разработчики заинтересованы в том, чтобы их приложения распространялись в разных операционках. И случаев, когда запустить программу, разработанную для другой операционной системы, невозможно, становится все больше и больше. В этом случае для запуска требуется «портировать» приложение и только потом пытаться установить его в текущей ОС.
В ряде случаев этого можно добиться простым перекомпилированием исходного текста программы. Однако чаще всего это не помогает, а это значит, что программу придется переписывать практически с нуля.
Однако Microsoft учли этот момент при разработке .NET Core. По сути платформа стала играть роль «стандартизирующей» прослойки, которая позволила добиться адаптации исходного кода под среду ОС. Это значит, что приложение для одной операционки без труда будет запускаться в другой.
Такой подход позволил избежать портирования отдельных программ, а портировать только программную прослойку. Для достижения цели Microsoft решили портировать один из компонентов модели .NET, в результате чего и появилась платформа «Дот Нет». Ее функциональность практически полностью совпадает с исходной версией и в чем-то даже стала намного шире.
Сегодня .NET Core активно применяется в трех операционных системах: помимо Windows, это еще Linux и macOS. Это позволяет запускать новые приложения во всех ОС без дополнительных изменений. Именно это качество платформы называется кроссплатформенностью.
Конечно, нужно понимать, что добиться 100% совместимости программ с любыми ОС практически нереально. Даже сейчас на платформе .NET не реализованы WebForms и Windows Forms.
В рамках кросс-совместимости платформа включает в себя и модульную инфраструктуру. Это позволяет получить доступ к пакетным данным и функциям. Благодаря этому значительно упрощается процесс создания ПО, повышается производительность и безопасность процессов.
Кроме этого, модульная инфраструктура помогает быстрее обновлять платформу, так как модули выпускаются и обновляются по отдельности.
Выводы
Характер платформы .NET делает ее незавершенной, поэтому она находится в постоянной доработке и обновлении. Если ранние версии инструмента использовались для приложений с большой функциональностью, то на современных этапах сделан акцент на развитие поддержки API и поддержку Visual Basic.
Главная функция дополнения заключается в предоставлении разработчикам большей свободы и одновременно контроля над процессами, особенно при обновлении и развертывании программ. Не удивительно, что .NET Core становится основным инструментом для разработки приложений разного типа и сложности.
Надеемся, что вы разобрались в том, что такое .NET Core и для чего эта платформа используется в программировании. Если у вас остались вопросы, то задайте их специалистам нашей компании Xelent!
ASP.NET Core, основы, обзор
В этой статье представлены основные этапы создания приложений ASP.NET Core, включая внедрение зависимостей (DI), конфигурацию, ПО промежуточного слоя и многое другое.
Program.cs
Приложения ASP.NET Core, созданные на основе веб-шаблонов, содержат код запуска приложения в файле Program.cs . В файле Program.cs :
- Настраиваются службы, необходимые приложению.
- Конвейер обработки запросов приложения определен как ряд компонентов ПО промежуточного слоя.
Следующий код запуска приложения поддерживает:
- страницы Razor;
- контроллеры MVC с представлениями;
- веб-API с контроллерами;
- Минимальные веб-API
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapGet("/hi", () => "Hello!"); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
Введение зависимостей (службы)
ASP.NET Core включает внедрение зависимостей, позволяющее обращаться к настроенным службам в рамках приложения. Службы добавляются в контейнер внедрения зависимостей с помощью WebApplicationBuilder.Services, builder.Services в предыдущем коде. При создании экземпляра WebApplicationBuilder добавляется множество предоставляемых платформой служб. builder — это WebApplicationBuilder в приведенном ниже коде:
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build();
В приведенном выше код builder добавляет в контейнер внедрения зависимостей конфигурацию, ведение журнала и множество других служб.
Следующий код добавляет в контейнер внедрения зависимостей Razor Pages, контроллеры MVC с представлениями и настраиваемый DbContext:
using Microsoft.EntityFrameworkCore; using RazorPagesMovie.Data; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString("RPMovieContext"))); var app = builder.Build();
Как правило, службы разрешаются из системы внедрения зависимостей с помощью внедрения конструктора. Платформа внедрения зависимостей предоставляет экземпляр этой службы во время выполнения.
В следующем коде используется внедрение конструктора для решения контекста базы данных и средство ведения журнала из внедрения зависимостей:
public class IndexModel : PageModel < private readonly RazorPagesMovieContext _context; private readonly ILogger_logger; public IndexModel(RazorPagesMovieContext context, ILogger logger) < _context = context; _logger = logger; >public IList Movie < get;set; >public async Task OnGetAsync() < _logger.LogInformation("IndexModel OnGetAsync."); Movie = await _context.Movie.ToListAsync(); >>
ПО промежуточного слоя
Конвейер обработки запросов состоит из ряда компонентов ПО промежуточного слоя. Каждый компонент выполняет операции в HttpContext , а затем либо вызывает следующий компонент в конвейере, либо завершает запрос.
По принятому соглашению компонент ПО промежуточного слоя добавляется в конвейер вызовом метода расширения Use . ПО промежуточного слоя, добавленное в приложение, выделено в следующем коде:
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapGet("/hi", () => "Hello!"); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
Хост
При запуске приложение ASP.NET Core создает узел. Узел инкапсулирует все ресурсы приложения:
- Реализация HTTP-сервера
- Компоненты ПО промежуточного слоя
- Ведение журналов
- Службы внедрения зависимостей
- Настройка
Существует три разных узла, способных запускать приложение ASP.NET Core:
- ASP.NET Core WebApplication, также известный как минимальный узел
- Универсальный узел .NET в сочетании с ASP.NET Core ConfigureWebHostDefaults
- ASP.NET Core WebHost
Рекомендуется использовать ASP.NET Core WebApplication и WebApplicationBuilder типы во всех шаблонах ASP.NET Core. WebApplication выполняется аналогично универсальному узлу .NET и предоставляет множество одинаковых интерфейсов, но требует меньше обратных вызовов для настройки. Ядро ASP.NET WebHost доступно только для обратной совместимости.
В следующем примере создается экземпляр : WebApplication
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build();
Метод WebApplicationBuilder.Build настраивает узел с параметрами по умолчанию, например с такими:
- Используйте Kestrel в качестве веб-сервера и включите интеграцию IIS.
- Загрузка конфигурации из файла appsettings.json , переменных среды, аргументов командной строки и других источников конфигураций.
- Отправка выходных данных журнала в поставщики служб консоли и отладки.
Сценарии, не связанные с Интернетом
Универсальный узел позволяет приложениям других типов использовать перекрестные расширения платформ, такие как средства ведения журналов, внедрения зависимостей, настройки и управления жизненным циклом. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core и Фоновые задачи с размещенными службами в ASP.NET Core.
Серверы
Приложение ASP.NET Core использует реализацию HTTP-сервера для приема HTTP-запросов. Сервер отправляет приложению запросы в виде набора функций запросов, объединенных в HttpContext .
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 :
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseAuthorization(); app.MapGet("/hi", () => "Hello!"); app.MapDefaultControllerRoute(); app.MapRazorPages(); app.Run();
Ведение журналов
ASP.NET Core поддерживает API ведения журнала, который совместим со множеством встроенных и сторонних соответствующих решений. Доступные следующие поставщики:
- Консоль
- Отладка
- Трассировка событий Windows
- Журнал событий Windows
- TraceSource
- Azure App Service
- Azure Application Insights
public class IndexModel : PageModel < private readonly RazorPagesMovieContext _context; private readonly ILogger_logger; public IndexModel(RazorPagesMovieContext context, ILogger logger) < _context = context; _logger = logger; >public IList Movie < get;set; >public async Task OnGetAsync() < _logger.LogInformation("IndexModel OnGetAsync."); Movie = await _context.Movie.ToListAsync(); >>
Маршрутизация
Маршрут — это шаблон URL-адреса, сопоставляемый с обработчиком. Обычно обработчик представляет собой страницу Razor, метод действия в контроллере MVC или ПО промежуточного слоя. Маршрутизация ASP.NET Core позволяет контролировать URL-адреса, используемые приложением.
Следующий код, созданный шаблоном веб-приложения ASP.NET Core, вызывает UseRouting:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
Подробные сведения см. в статье Маршрутизация в 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. Альтернативное расположение корневого веб-каталога можно указать при создании узла. Дополнительные сведения см. в разделе Корневой веб-каталог.
В файлах Razor .cshtml ~/ указывает на корневой каталог. Путь, начинающийся с ~/ , называется виртуальным путем.
Дополнительные ресурсы
В этой статье представлены основные этапы создания приложений ASP.NET Core, включая внедрение зависимостей (DI), конфигурацию, ПО промежуточного слоя и многое другое.
Класс Startup
В классе Startup делается следующее.
- Настраиваются службы, необходимые приложению.
- Конвейер обработки запросов приложения определен как ряд компонентов ПО промежуточного слоя.
Пример класса Startup :
public class Startup < public void ConfigureServices(IServiceCollection services) < services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext"))); services.AddControllersWithViews(); services.AddRazorPages(); > public void Configure(IApplicationBuilder app) < app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints =>< endpoints.MapDefaultControllerRoute(); endpoints.MapRazorPages(); >); > >Введение зависимостей (службы)
ASP.NET Core включает встроенную платформу внедрения зависимостей, позволяющую обращаться к настроенным службам в рамках приложения. Например, службой является компонент ведения журнала.
Код для настройки (или регистрации) служб добавляется в метод Startup.ConfigureServices . Например:
public void ConfigureServices(IServiceCollection services) < services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext"))); services.AddControllersWithViews(); services.AddRazorPages(); >Как правило, службы разрешаются из системы внедрения зависимостей с помощью внедрения конструктора. При внедрении конструктора класс объявляет параметр конструктора, который может быть требуемым типом или интерфейсом. Платформа внедрения зависимостей предоставляет экземпляр этой службы во время выполнения.
В следующем примере показано использование внедрения конструктора для разрешения RazorPagesMovieContext из системы внедрения зависимостей.
public class IndexModel : PageModel < private readonly RazorPagesMovieContext _context; public IndexModel(RazorPagesMovieContext context) < _context = context; >// . public async Task OnGetAsync() < Movies = await _context.Movies.ToListAsync(); >>Если встроенный контейнер с инверсией управления (IoC) не удовлетворяет всем потребностям приложения, вместо него можно использовать сторонний контейнер IoC.
ПО промежуточного слоя
Конвейер обработки запросов состоит из ряда компонентов ПО промежуточного слоя. Каждый компонент выполняет операции в HttpContext , а затем либо вызывает следующий компонент в конвейере, либо завершает запрос.
По принятому соглашению компонент ПО промежуточного слоя добавляется в конвейер вызовом метода расширения Use. в методе Startup.Configure . Например, чтобы включить отрисовку статических файлов, вызовите UseStaticFiles .
В следующем примере показана настройка конвейера обработки запросов.
public void Configure(IApplicationBuilder app) < app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints =>< endpoints.MapDefaultControllerRoute(); endpoints.MapRazorPages(); >); >ASP.NET Core содержит большой набор встроенного ПО промежуточного слоя. Кроме того, можно создать пользовательские компоненты ПО промежуточного слоя.
Хост
При запуске приложение ASP.NET Core создает узел. Узел инкапсулирует все ресурсы приложения:
- Реализация HTTP-сервера
- Компоненты ПО промежуточного слоя
- Ведение журналов
- Службы внедрения зависимостей
- Настройка
Существует два различных узла:
- Универсальный узел .NET
- Веб-узел ASP.NET Core
Рекомендуется использовать универсальный узел .NET. Веб-узел ASP.NET Core доступен только для обеспечения обратной совместимости.
В следующем примере показано создание универсального узла .NET.
public class Program < public static void Main(string[] args) < CreateHostBuilder(args).Build().Run(); >public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => < webBuilder.UseStartup(); >); >Методы CreateDefaultBuilder и ConfigureWebHostDefaults применяются для настройки узла с набором параметров по умолчанию, например:
- Используйте Kestrel в качестве веб-сервера и включите интеграцию IIS.
- Загрузка конфигурации из appsettings.json , appsettings..json , переменных среды, аргументов командной строки и других источников конфигураций.
- Отправка выходных данных журнала в поставщики служб консоли и отладки.
Сценарии, не связанные с Интернетом
Универсальный узел позволяет приложениям других типов использовать перекрестные расширения платформ, такие как средства ведения журналов, внедрения зависимостей, настройки и управления жизненным циклом. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core и Фоновые задачи с размещенными службами в ASP.NET Core.
Серверы
Приложение ASP.NET Core использует реализацию HTTP-сервера для приема HTTP-запросов. Сервер отправляет приложению запросы в виде набора функций запросов, объединенных в HttpContext .
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 . Эта реализация доступна в любом месте приложения посредством внедрения зависимостей.
В следующем примере показана настройка приложения для предоставления подробных сведений об ошибке при выполнении в среде Development .
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) < if (env.IsDevelopment()) < app.UseDeveloperExceptionPage(); >else < app.UseExceptionHandler("/Error"); app.UseHsts(); >app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => < endpoints.MapDefaultControllerRoute(); endpoints.MapRazorPages(); >); >Ведение журналов
ASP.NET Core поддерживает API ведения журнала, который совместим со множеством встроенных и сторонних соответствующих решений. Доступные следующие поставщики:
- Консоль
- Отладка
- Трассировка событий Windows
- Журнал событий Windows
- TraceSource
- Azure App Service
- Azure Application Insights
public class TodoController : ControllerBase < private readonly ILogger _logger; public TodoController(ILoggerlogger) < _logger = logger; >[HttpGet("", Name = "GetTodo")] public ActionResult GetById(string id) < _logger.LogInformation(LoggingEvents.GetItem, "Getting item ", id); // Item lookup code removed. if (item == null) < _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById() NOT FOUND", id); return NotFound(); > return item; > >Методы ведения журналов, такие как 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. Альтернативное расположение корневого веб-каталога можно указать при создании узла. Дополнительные сведения см. в разделе Корневой веб-каталог.
Для указания на корневой каталог файлов Razor .cshtml используется символ тильды и косой черты ~/ . Путь, начинающийся с ~/ , называется виртуальным путем.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.