Основы ASP.NET Core

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

Класс Startup

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

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

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

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<RazorPagesMovieContext>(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.

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

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

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

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<RazorPagesMovieContext>(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.

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

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

Конвейер обработки запросов состоит из ряда компонентов ПО промежуточного слоя. Каждый компонент выполняет операции в 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.

Узел

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

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

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

  • Универсальный узел .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<Startup>();
            });
}

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

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

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

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

Универсальный узел позволяет приложениям других типов использовать перекрестные расширения платформ, такие как средства ведения журналов, внедрения зависимостей, настройки и управления жизненным циклом. Дополнительные сведения см. в разделах Универсальный узел .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.

Параметр Configuration

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

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

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

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

Для получения дополнительной информации см. Конфигурация в .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.

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

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

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

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

public class TodoController : ControllerBase
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}", Name = "GetTodo")]
    public ActionResult<TodoItem> GetById(string id)
    {
        _logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
        
        // Item lookup code removed.
        
        if (item == null)
        {
            _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
            return NotFound();
        }
        
        return item;
    }
}

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

Для получения дополнительной информации см. Ведение журнала в .NET Core и ASP.NET Core.

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

Маршрут — это шаблон 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) для всех запросов, отправленных через клиентов, созданных фабрикой.

Для получения дополнительной информации см. Выполнения HTTP-запросов с помощью IHttpClientFactory в ASP.NET Core.

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

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

  • Исполняемый файл, в котором размещено приложение (EXE).
  • Скомпилированные сборки, составляющие приложение (DLL).
  • Файлы содержимого, используемые приложением, например:
    • Файлы Razor (CSHTML, RAZOR).
    • Файлы конфигурации (JSON, XML).
    • Файлы данных (DB).
  • Корневой веб-каталог, обычно это папка wwwroot.

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

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

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

  • Таблицы стилей (CSS).
  • JavaScript (JS).
  • Изображения (PNG, JPG).

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

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

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

Для указания на корневой каталог файлов Razor (CSHTML) используется символ тильды и косой черты ~/. Путь, начинающийся с ~/, называется виртуальным путем.

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

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

Класс Startup

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

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

Службы — это компоненты, которые используются в приложении. Например, службой является компонент ведения журнала. Код для настройки (или регистрации) служб добавляется в метод Startup.ConfigureServices.

Конвейер обработки запросов состоит из ряда компонентов ПО промежуточного слоя. Например, это ПО может обрабатывать запросы для статических файлов или перенаправлять HTTP-запросы в HTTPS. Каждый компонент ПО промежуточного слоя выполняет асинхронные операции в HttpContext, а затем либо вызывает следующий компонент в конвейере, либо завершает запрос. Код для настройки конвейера обработки запросов добавляется в метод Startup.Configure.

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

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

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

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

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

Ниже показан класс, который использует внедрение зависимостей для получения объекта контекста Entity Framework Core. Выделенная строка является примером внедрения через конструктор.

public class IndexModel : PageModel
{
    private readonly RazorPagesMovieContext _context;

    public IndexModel(RazorPagesMovieContext context)
    {
        _context = context;
    }

    // ...

    public async Task OnGetAsync()
    {
        Movies = await _context.Movies.ToListAsync();
    }
}

Несмотря на то, что система внедрения зависимостей является встроенной, она позволяет вам при желании подключать сторонний контейнер с инверсией управления (IoC).

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

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

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

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

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

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

        services.AddDbContext<MovieContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

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

Для получения дополнительной информации см. ПО промежуточного слоя ASP.NET Core.

Узел

Приложение ASP.NET Core создает узел при запуске. Узел — это объект, который инкапсулирует все ресурсы приложения.

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

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

Доступны два узла: веб-узел и универсальный узел. В ASP.NET Core 2.x универсальный узел используется в сценариях, не связанных с Интернетом.

Код для создания узла находится в Program.Main:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

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

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

Для получения дополнительной информации см. Веб-узел ASP.NET Core.

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

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

Серверы

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

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

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

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

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

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

Параметр Configuration

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

Например, можно указать, что источником конфигурации являются файл appsettings.json и переменные среды. В этом случае при запросе значения ConnectionString платформа сначала выполнит поиск в файле appsettings.json . Если значение будет найдено не только в нем, но и в переменной среды, приоритет получит значение из переменной среды.

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

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

Параметры

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

Например, следующий код задает параметры WebSockets:

var options = new WebSocketOptions  
{  
   KeepAliveInterval = TimeSpan.FromSeconds(120),  
   ReceiveBufferSize = 4096
};  

app.UseWebSockets(options);

Для получения дополнительной информации см. Шаблон параметров в ASP.NET Core.

Среды

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

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseMvc();
}

Для получения дополнительной информации см. Использование нескольких сред в ASP.NET Core.

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

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

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

Записи в журналы можно вносить в любом месте кода приложения. Для этого нужно получить объект ILogger из внедрения зависимостей и вызвать методы ведения журналов.

Ниже приведен пример кода, где используется объект ILogger. В коде выделены строки внедрения конструктора и вызова методов ведения журналов.

public class TodoController : ControllerBase
{
    private readonly ILogger _logger;

    public TodoController(ILogger<TodoController> logger)
    {
        _logger = logger;
    }

    [HttpGet("{id}", Name = "GetTodo")]
    public ActionResult<TodoItem> GetById(string id)
    {
        _logger.LogInformation(LoggingEvents.GetItem, "Getting item {Id}", id);
        // Item lookup code removed.
        if (item == null)
        {
            _logger.LogWarning(LoggingEvents.GetItemNotFound, "GetById({Id}) NOT FOUND", id);
            return NotFound();
        }
        return item;
    }
}

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

Для получения дополнительной информации см. Ведение журнала в .NET Core и ASP.NET Core.

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

Маршрут — это шаблон 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) для всех запросов, отправленных через клиентов, созданных фабрикой.

Для получения дополнительной информации см. Выполнения HTTP-запросов с помощью IHttpClientFactory в ASP.NET Core.

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

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

  • Исполняемый файл, в котором размещено приложение (EXE).
  • Скомпилированные сборки, составляющие приложение (DLL).
  • Файлы содержимого, не относящиеся к коду, используемые приложением, например:
    • Файлы Razor (CSHTML, RAZOR).
    • Файлы конфигурации (JSON, XML).
    • Файлы данных (DB).
  • Корневой веб-каталог, обычно опубликованная папка wwwroot.

Во время разработки:

  • Корень содержимого по умолчанию сбрасывается до корневого каталога проекта.
  • Корневой каталог проекта используется для создания:
    • пути к файлам содержимого, не являющихся кодом приложения, в корневом каталоге проекта;
    • корневого веб-каталога, обычно папка wwwroot в корневом каталоге проекта.

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

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

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

  • Таблицы стилей (CSS).
  • JavaScript (JS).
  • Изображения (PNG, JPG).

Статические файлы обслуживаются по умолчанию только в корневом веб-каталоге (и подкаталогах).

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

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

<ItemGroup>
  <Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>

Для указания на корневой каталог файлов Razor (CSHTML) используется символ тильды и косой черты ~/. Путь, начинающийся с ~/, называется виртуальным путем.

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