Найти тему

12 новых фич ASP.NET Core .NET 7 Preview 6

Оглавление

Вышел .NET 7 Preview 6. И традиционно в новой версии есть пачка изменений, связанных с ASP.NET Core:

  • Появился middlware для распаковки сжатых с помощью Brotli, Deflate или GZip запросов
  • Появился middlware для кэширования результатов запросов
  • В middlaware для ограничения числа запросов (rate limiter) появилась возможность настраивать отдельные правила для разных эндпоинтов
  • В Kestrel появился поддержка веб-сокетов для HTTP/2
  • Улучшение производительности Kestrel на многоядерных машинах
  • Поддержка логирования дополнительных header-ов запроса для W3CLogger
  • Добавлена поддержка System.Security.Cryptography в WebAssembly
  • Появились темплейты пустых Blazor-проектов
  • Microsoft.AspNetCore.Components.CustomElements для Blazor теперь входят в поставку .NET 7
  • Новый эксперементальный компонент QuickGrid для Blazor
  • Мультисегментные параметры для gRPC JSON transcoding
  • Поддержка методов-расширений RequireAuthorization(), RequireCors(), WithTags(), WithDescription(), ExcludeFromDescription(), WithSummary(), WithOpenApi() AddFilter() для групп эндпоинтов (MapGroup)

middlware для распаковки сжатых с помощью Brotli, Deflate или GZip запросов

Добавляется с помощью экстеншн-метода UseRequestDecompression для IApplicationBuilder и AddRequestDecompression для IServiceCollection:

Можно настраивать при регистрации, подробности в классе RequestDecompressionOptions. Можно добавлять новые декомпрессоры для других форматов сжатия, реализующие интерфейс IDecompressionProvider.

middlware для кэширования ответов на запросы

Новый Middlware позволяет кэшировать ранее полученные результаты запросов с некоторыми параметрами или по другим настройкам.

Добавляется в пайплайн с помощью двух методов-расширений:

-2

Чтобы эндпоинт кэшировал резльуты на запросы досаточно добавить метод-расширение CacheOutput:

-3

Запрос /notcached будет всегда возвращать ткущее время, а помеченный с помощью CacheOutput запрос /cached после первого запроса всегда будет возвращать одинаковое значение.

Есть много настроек для тонкого конфигурирования условий кэширования. Например, можно настроить разные закэшированные результаты для разных значений параметра запроса (VaryByQuery) или в зависимости от значений хидера (VaryByHeader):

-4

Middlware для кэширования обрабатывает некоторые типовые проблемы, связанные с использованием кэша. Например, в высоконагруженном кэше при инвалидации какого-то значения в кэше одновременно могут начать выполняться много запросов, вычисляющих одинаковое значение из-за того, что кэш на момент начала выполнения запроса был пустым. Новый middlware ставит в ожидание все запросы, если какой-то кэшируемый запрос с аналогичными параметрами уже выполняется. Это позволяет вычислять значение только один раз.

Для демонстрации комплексного примера использования кэширования ответов разработчики выпустили пример OutputCachingSample app в репозитории ASP.NET Core.

Изменения в middlware ограничения числа запросов

Теперь middlware для rate limit запросов можно применять к отдельным эндпоинтам и комбинировать их с глобальным ограничением числа запросов:

-5

В Kestrel появился поддержка веб-сокетов для HTTP/2

Новые API не нужны, (почти) всё будет работать из коробки с существующей конфигурацией — единственной деталью реализации может быть то, что HTTP/2 WebSockets используют CONNECT вместо GET, поэтому роуты и контроллеры могут нуждаться в изменении.

Улучшение производительности Kestrel на многоядерных машинах

Вместо тысячи слов о деталях изменений — бенчмарк показал прирост числа запросов в 5 раз на 80-ядерном ARM64 Ampere Altra VMs и двухкратный рост производительности бенчмарка HTTPS JSON benchmark от TechEmpower на 48-ядерном AMD VM:

-6

Поддержка логирования дополнительных header-ов запроса для W3CLogger

-7

Добавлена поддержка System.Security.Cryptography в WebAssembly

В .NET 7 Preview 6 добавилась поддержка следующих алгоритмов:

  • SHA1
  • SHA256
  • SHA384
  • SHA512
  • HMACSHA1
  • HMACSHA256
  • HMACSHA384
  • HMACSHA512

Поддержка алгоритмов AES-CBC, PBKDF2, и HKDF запланирована в будущих обновлениях .NET 7.

Появились темплейты пустых Blazor-проектов

-8

Для создания проектов можно использовать консольные команды:

-9

Microsoft.AspNetCore.Components
.CustomElements для Blazor теперь входят в поставку .NET 7

Подробнее про пользовательские Blazor-элементы.

Новый эксперементальный компонент QuickGrid для Blazor

QuickGrid — это новый экспериментальный Blazor-компонент для быстрого и эффективного отображения данных в табличном виде.

Чтобы начать работу с QuickGrid нужно добавить в проект пакет Microsoft.AspNetCore.Components.QuickGrid:

-10

Пример использования нового компонента:

-11

Важно понимать, что QuickGrid высоко оптимизирован и использует передовые методы для достижения оптимальной производительности рендеринга, но разработчики фреймворка не ставят цели добавить в QuickGrid все функции, которые обычно имеют полноценные коммерческие сетки, например, иерархические строки, перетаскивание столбцов или выбор диапазона в стиле Excel.

Мультисегментные параметры для gRPC JSON transcoding

gRPC JSON transcoding — новая фича .NET 7 для преобразования gRPC API в RESTful API.

Теперь можно настроить API-интерфейсы gRPC для привязки свойств к параметрам нескольких сегментов. Например, /v1/{book=shelves/*/books/*} указывает маршрут с многосегментным параметром book. Он соответствует URL-адресам типа /v1/shelves/user-name/books/cool-book, а параметр book имеет значение shelves/user-name/books/cool-book.

Поддержка методов-расширений RequireAuthorization(), RequireCors(), WithTags(), WithDescription(), ExcludeFromDescription(), WithSummary(), WithOpenApi() AddFilter() для групп эндпоинтов (MapGroup)

-12

Материалы

  1. OutputCachingSample app в репозитории ASP.NET Core
  2. Демо-сайт QuickGrid for Blazor