Как работает 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, которые помогают собирать и анализировать диагностические данные из приложения.