Вышел .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 позволяет кэшировать ранее полученные результаты запросов с некоторыми параметрами или по другим настройкам.
Добавляется в пайплайн с помощью двух методов-расширений:
Чтобы эндпоинт кэшировал резльуты на запросы досаточно добавить метод-расширение CacheOutput:
Запрос /notcached будет всегда возвращать ткущее время, а помеченный с помощью CacheOutput запрос /cached после первого запроса всегда будет возвращать одинаковое значение.
Есть много настроек для тонкого конфигурирования условий кэширования. Например, можно настроить разные закэшированные результаты для разных значений параметра запроса (VaryByQuery) или в зависимости от значений хидера (VaryByHeader):
Middlware для кэширования обрабатывает некоторые типовые проблемы, связанные с использованием кэша. Например, в высоконагруженном кэше при инвалидации какого-то значения в кэше одновременно могут начать выполняться много запросов, вычисляющих одинаковое значение из-за того, что кэш на момент начала выполнения запроса был пустым. Новый middlware ставит в ожидание все запросы, если какой-то кэшируемый запрос с аналогичными параметрами уже выполняется. Это позволяет вычислять значение только один раз.
Для демонстрации комплексного примера использования кэширования ответов разработчики выпустили пример OutputCachingSample app в репозитории ASP.NET Core.
Изменения в middlware ограничения числа запросов
Теперь middlware для rate limit запросов можно применять к отдельным эндпоинтам и комбинировать их с глобальным ограничением числа запросов:
В Kestrel появился поддержка веб-сокетов для HTTP/2
Новые API не нужны, (почти) всё будет работать из коробки с существующей конфигурацией — единственной деталью реализации может быть то, что HTTP/2 WebSockets используют CONNECT вместо GET, поэтому роуты и контроллеры могут нуждаться в изменении.
Улучшение производительности Kestrel на многоядерных машинах
Вместо тысячи слов о деталях изменений — бенчмарк показал прирост числа запросов в 5 раз на 80-ядерном ARM64 Ampere Altra VMs и двухкратный рост производительности бенчмарка HTTPS JSON benchmark от TechEmpower на 48-ядерном AMD VM:
Поддержка логирования дополнительных header-ов запроса для W3CLogger
Добавлена поддержка System.Security.Cryptography в WebAssembly
В .NET 7 Preview 6 добавилась поддержка следующих алгоритмов:
- SHA1
- SHA256
- SHA384
- SHA512
- HMACSHA1
- HMACSHA256
- HMACSHA384
- HMACSHA512
Поддержка алгоритмов AES-CBC, PBKDF2, и HKDF запланирована в будущих обновлениях .NET 7.
Появились темплейты пустых Blazor-проектов
Для создания проектов можно использовать консольные команды:
Microsoft.AspNetCore.Components
.CustomElements для Blazor теперь входят в поставку .NET 7
Подробнее про пользовательские Blazor-элементы.
Новый эксперементальный компонент QuickGrid для Blazor
QuickGrid — это новый экспериментальный Blazor-компонент для быстрого и эффективного отображения данных в табличном виде.
Чтобы начать работу с QuickGrid нужно добавить в проект пакет Microsoft.AspNetCore.Components.QuickGrid:
Пример использования нового компонента:
Важно понимать, что 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)
Материалы
- OutputCachingSample app в репозитории ASP.NET Core
- Демо-сайт QuickGrid for Blazor