Модули, обработчики и ПО промежуточного слоя

Совет

Это фрагмент из электронной книги для разработчиков ASP NET веб-формы для Azure, Blazor доступных в документации .NET или в виде бесплатного скачиваемого PDF-файла, который можно читать в автономном режиме.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

Приложение ASP.NET Core строится на основе ПО промежуточного слоя. ПО промежуточного слоя — это обработчики, добавленные в конвейер для обработки запросов и ответов. В приложении Web Forms аналогичные проблемы решают модули и обработчики HTTP-данных. В ASP.NET Core модули, обработчики, Global.asax.cs и жизненный цикл приложения заменяются ПО промежуточного слоя. В этой главе вы узнаете о ПО промежуточного слоя в контексте приложения Blazor.

Обзор

Конвейер запросов ASP.NET Core состоит из последовательности делегатов запроса, вызываемых один за другим. На следующей схеме демонстрируется этот принцип. Поток выполнения показан черными стрелками.

pipeline

На предыдущей схеме отсутствует концепция событий жизненного цикла. Данная концепция лежит в основе обработки запросов ASP.NET Web Forms. Эта система упрощает понимание того, какой процесс происходит, и позволяет вставлять ПО промежуточного слоя в любой момент. ПО промежуточного слоя выполняется в том порядке, в котором оно добавляется в конвейер запросов. Оно также добавляется в код вместо файлов конфигурации, обычно в файле Startup.cs.

Katana

Читатели, знакомые с Katana, будут чувствовать себя комфортно в ASP.NET Core. Фактически Katana — это платформа, от которой ведет свое начало ASP.NET Core. В ней представлены аналогичные шаблоны ПО промежуточного слоя и конвейера для ASP.NET 4.x. ПО промежуточного слоя, разработанное для Katana, можно адаптировать для работы с конвейером ASP.NET Core.

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

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

В следующей таблице приведен список ПО промежуточного слоя и компонентов в ASP.NET Core.

Модуль Модуль ASP.NET 4.x Вариант в ASP.NET Core
Ошибки HTTP CustomErrorModule ПО промежуточного слоя для страниц кода состояния
Документ по умолчанию DefaultDocumentModule ПО промежуточного слоя для файлов по умолчанию
Просмотр каталогов DirectoryListingModule ПО промежуточного слоя для просмотра каталогов
Динамическое сжатие DynamicCompressionModule ПО промежуточного слоя сжатия ответов
Трассировка неудачно завершенных запросов FailedRequestsTracingModule Ведение журналов ASP.NET Core
Кэширование файлов FileCacheModule ПО промежуточного слоя для кэширования ответов
Кэширование HTTP HttpCacheModule ПО промежуточного слоя для кэширования ответов
Ведение журнала HTTP HttpLoggingModule Ведение журналов ASP.NET Core
Перенаправление HTTP HttpRedirectionModule ПО промежуточного слоя для переопределения URL-адресов
Фильтры ISAPI IsapiFilterModule ПО промежуточного слоя
ISAPI IsapiModule ПО промежуточного слоя
Фильтрация запросов RequestFilteringModule Интерфейс IRule ПО промежуточного слоя для переопределения URL-адресов
Перезапись URL-адресов† RewriteModule ПО промежуточного слоя для переопределения URL-адресов
Статическое сжатие StaticCompressionModule ПО промежуточного слоя сжатия ответов
Статическое содержимое StaticFileModule ПО промежуточного слоя для статических файлов
Авторизация URL-адреса UrlAuthorizationModule Идентификация ASP.NET Core

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

Пользовательское ПО промежуточного слоя

Встроенное ПО промежуточного слоя может не обрабатывать все сценарии, необходимые для приложения. В таких случаях имеет смысл создать собственное ПО промежуточного слоя. Существует много способов определения ПО промежуточного слоя, самым простым из которых является обычный делегат. Рассмотрим следующее ПО промежуточного слоя, которое принимает запрос языка и региональных параметров из строки запроса:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use(async (context, next) =>
        {
            var cultureQuery = context.Request.Query["culture"];

            if (!string.IsNullOrWhiteSpace(cultureQuery))
            {
                var culture = new CultureInfo(cultureQuery);

                CultureInfo.CurrentCulture = culture;
                CultureInfo.CurrentUICulture = culture;
            }

            // Call the next delegate/middleware in the pipeline
            await next();
        });

        app.Run(async (context) =>
            await context.Response.WriteAsync(
                $"Hello {CultureInfo.CurrentCulture.DisplayName}"));
    }
}

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