Как работает ASP.NET Core
Приложение ASP.NET Core по сути является приложением .NET с файлом Program.cs, который настраивает необходимые компоненты веб-приложения и получает его выполнение.
Самый простой файл Program.cs приложения ASP.NET Core:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
С помощью предыдущего кода:
- Базовое веб-приложение ASP.NET Core настроено, которое прослушивает HTTP-запросы GET по корневому URL-адресу ("/") и отвечает на сообщение "Hello World!".
- Приложение инициализируется, настраивает один маршрут и запускает веб-сервер.
Blazor
Интерактивный веб-интерфейс можно создать с помощью ASP.NET Core с помощью Blazor. Blazor — это платформа веб-интерфейса на основе компонентов, интегрированная с ASP.NET Core, используемая для создания интерактивных веб-интерфейсов с помощью HTML, CSS и C#.
Повторно используемый компонент Blazor, например следующий Counter компонент, определен в файле Counter.razor :
@page "/counter"
@rendermode InteractiveServer
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
С помощью предыдущего кода:
- Компонент создается, отображающий счетчик.
- Блок @code содержит логику компонента с помощью C#, включая метод для увеличения счетчика.
- Значение счетчика отображается и обновляется при каждом нажатии кнопки.
- Подход к компоненту позволяет повторно использовать код в разных частях приложения и может выполняться в браузере или на сервере в приложении Blazor.
Компонент Counter можно добавить на любую веб-страницу в приложении, добавив <Counter /> элемент.
@page "/"
<PageTitle>Home</PageTitle>
<h1>Hello, world!</h1>
<Counter />
Программные интерфейсы
ASP.NET Core предоставляет платформы для создания API, служб gRPC и приложений в режиме реального времени с помощью SignalR для мгновенной отправки обновлений данных клиентам.
Базовый минимальный API:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/hello", () => "Hello, World!");
app.Run();
С помощью предыдущего кода:
- Минимальный API настроен, который прослушивает HTTP-запросы GET по URL-адресу /hello и отвечает на сообщение "Hello, World!".
- Используется
WebApplicationBuilderдля настройки приложения. - Метод
MapGetопределяет маршрут и обработчик для запросов GET.
ПО промежуточного слоя
ASP.NET Core использует конвейер компонентов ПО промежуточного слоя для обработки HTTP-запросов и ответов. Этот модульный подход обеспечивает гибкость, позволяя настраивать и расширять функциональные возможности приложения, добавляя или удаляя компоненты ПО промежуточного слоя по мере необходимости.
Конвейер ПО промежуточного слоя обрабатывает HTTP-запросы последовательно, гарантируя, что каждый компонент может выполнять назначенную задачу перед передачей запроса следующему компоненту в конвейере.
Добавление встроенного промежуточного ПО в файл Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpsRedirection();
app.UseRouting();
app.MapStaticAssets();
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/", () => "Hello World!");
app.Run();
В предыдущем коде добавлены несколько распространенных компонентов ПО промежуточного слоя:
-
UseHttpsRedirection: перенаправляет HTTP-запросы на HTTPS. -
UseRouting: позволяет маршрутизации сопоставлять запросы с конечными точками. -
MapStaticAssets: оптимизирует доставку статических файлов, таких как HTML, CSS, JavaScript, изображения и другие ресурсы. -
UseAuthentication: добавляет возможности проверки подлинности. -
UseAuthorization: добавляет возможности авторизации. -
app.MapGet: это простая конечная точка для демонстрации запуска приложения.
Внедрение зависимостей
ASP.NET Core включает встроенную поддержку внедрения зависимостей (DI) для настройки служб, используемых приложением и его различными компонентами платформы.
Например, вам может потребоваться централизованно настроить службу с помощью платформы, например EntityFramework Core, от которой зависят другие части приложения для доступа к базе данных. Контекст базы данных можно настроить из EntityFramework Core в качестве службы с помощью внедрения зависимостей следующим образом:
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
public DbSet<Product> Products { get; set; } = default!;
}
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
var app = builder.Build();
app.Run();
С помощью предыдущего кода:
- A
DbContextнастраивается как служба с помощью внедрения зависимостей. - Используется
WebApplicationBuilderдля настройки приложения. - Метод
AddDbContextрегистрирует контейнерDbContextвнедрения зависимостей. - Строка подключения извлекается из конфигурации и используется для настройки контекста базы данных.
Настройка
ASP.NET Core поддерживает доступ к данным конфигурации из различных источников, таких как JSON-файлы, переменные среды и аргументы командной строки.
Настройка строки подключения в файлеappsetting.json :
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
}
}
В файле Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
var app = builder.Build();
app.Run();
С помощью предыдущего кода:
- Строка подключения настраивается в файлеappsettings.json .
- Используется
WebApplicationBuilderдля настройки приложения. - Метод
AddDbContextрегистрирует контейнерDbContextвнедрения зависимостей. - Строка подключения извлекается из конфигурации и используется для настройки контекста базы данных.
Мониторинг и диагностика
ASP.NET Core предоставляет полный набор средств для мониторинга и поддержания работоспособности и производительности приложений. Эти функции можно легко добавить в приложение в качестве компонентов ПО промежуточного слоя, интегрируя определенные функциональные возможности в проект:
- Встроенные метрики: ASP.NET Core включает встроенные метрики, отслеживающие различные аспекты производительности приложения, такие как ставки запросов, время отклика и частоты ошибок.
- Гибкая платформа ведения журнала: гибкая платформа ведения журнала встроена и поддерживает различные поставщики ведения журналов, включая консоль, отладку и источник событий. Это помогает записывать подробные журналы для диагностика и мониторинга.
- Трассировка: ASP.NET Core поддерживает распределенную трассировку, которая помогает отслеживать поток запросов между различными службами и компонентами. Это полезно для диагностики проблем с производительностью и понимания взаимодействия между различными частями приложения.
- OpenTelemetry: ASP.NET Core интегрируется с OpenTelemetry, платформой наблюдения с открытым кодом для облачного программного обеспечения. OpenTelemetry предоставляет стандартные API и инструментирование для сбора метрик, журналов и трассировок, что позволяет более эффективно отслеживать и диагностировать приложения.
- Проверки работоспособности. API проверок работоспособности позволяет отслеживать работоспособность приложения и его зависимостей. Вы можете настроить проверки работоспособности, чтобы сообщить о состоянии различных компонентов, таких как базы данных, внешние службы и многое другое.
- Средства диагностики: ASP.NET Core предоставляет различные средства диагностики, такие как dotnet-trace, dotnet-dump и dotnet-gcdump, которые помогают собирать и анализировать диагностические данные из приложения.