Наряду с выходом очередных стабильных поддерживаемых версий .NET, стала доступна первая Release Candidate версия .NET 7. Давайте посмотрим, есть ли в ней что-то новое. |
Для работы с .NET 7 RC 1 рекомендуется использовать Visual Studio 17.4 Preview 2 или последнюю предварительную версию Visual Studio for Mac.
Где скачать?
.NET 7 RC 1
В данной версии содержатся только исправления замеченных ошибок.
ASP.NET Core 7 RC 1
Валидация цепочки сертификатов (certificate chain)
В HttpsConnectionAdapterOptions добавлено свойство ServerCertificateChain, содержащее коллекцию цепочки сертификатов.
Ускорение загрузки файлов по HTTP/2
Увеличена скорость загрузки файлов по HTTP/2 в сетях с большой задержкой (high latency) за счет увеличения окна соединения (window size) c 128 Кб до 1 Мб. Например, при загрузке файла размером 108 Мб время загрузки уменьшилось в 6.5 раз.
Улучшения HTTP/3
Команда ASP.NET Core продолжает улучшать работу HTTP/3. В этот раз появилась поддержка ListenOptions.UseHttps(…). Также была проведена работа по уменьшению выделений памяти, например:
Экспериментальная поддержка WebTransport по HTTP/3 в Kestrel
WebTransport это черновая спецификация (draft specification) протокола, аналогичного WebSockets. Он позволяет использовать множество потоков в одном соединении. Это позволяет избежать блокировок при ожидании данных.
Экспериментальная поддержка OpenAPI для транскодирования gRPC в JSON
.NET 7 RC 1 добавляет экспериментальную поддержку создания OpenAPI при транскодировании gRPC в JSON. Для использования этой возможности необходимо:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc().AddJsonTranscoding();
builder.Services.AddGrpcSwagger();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "gRPC transcoding", Version = "v1" });
});
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});
app.MapGrpcService>GreeterService>();
app.Run();
Улучшения ограничения числа запросов (rate limiting)
В middleware для ограничения числа запросов были добавлены новые возможности:
- Атрибут [EnableRateLimiting(…)] позволяющий включать ограничение числа запросов для указанного Действия Контроллера.
public class UsersController : Controller
{
[EnableRateLimitingAttribute("UsersControllerPolicy")]
public IActionResult Index() { … }
}
- Для этой же цели, в случае с Minimal API, для групп можно использовать методы RequireRateLimiting(…) и DisableRateLimiting() (последний отключает заданное ранее ограничение). Например:
app.MapGroup("/companies").RequireRateLimiting(rateLimiterPolicy);
app.MapGroup("/users").RequireRateLimiting("UsersGroupPolicy");
app.MapGroup("/users/avatar").DisableRateLimiting();
где rateLimiterPolicy – реализация IRateLimiterPolicy.
- Метод AddRateLimiter(…) теперь позволяет настраивать сразу несколько ограничителей.
Улучшения разработки в macOS
По заявлению разработчиков использовать отладочный сертификат для HTTPS в macOS стало проще. Теперь будет появляться меньше запросов аутентификации при использовании такого сертификата.
Динамические запросы аутентификации в Blazor WebAssembly
Теперь Blazor позволяет добавлять передавать дополнительные параметры аутентификации при помощи метода класса InteractiveRequestOptions.TryAddAdditionalParameter(…). Например:
InteractiveRequestOptions requestOptions = new()
{
Interaction = InteractionType.SignIn,
ReturnUrl = NavigationManager.Uri,
};
requestOptions.TryAddAdditionalParameter("login_hint", "user@example.com");
NavigationManager.NavigateToLogin("authentication/login", requestOptions);
Обработка события смены страницы
Еще одна новая возможность Blazor – подписка на событие смены страницы. Для этого добавлен метод NavigationManager.RegisterLocationChangingHandler(…). При этом событие генерируется только для навигации внутри приложения.
Улучшение отладки Blazor WebAssembly
- Поддержка настройки "Just My Code" для сокрытия отображения не пользовательских типов.
- Поддержка просмотра многомерных массивов.
- Стек вызовов теперь корректно отображает имена асинхронных методов.
- Улучшенное вычисление выражений.
- Корректная обработка ключевого слова new на производных членах.
- Поддержка атрибутов для отладки из System.Diagnostics.
Средства сборки .NET WebAssembly для .NET 6
Теперь .NET 7 может использоваться для сборки проектов, нацеленных на .NET 6. Для этого необходимо добавить workload "wasm-tools-net6".
Взаимодействие JavaScript с .NET в WebAssembly
В .NET 7 представлен новый низкоуровневый механизм использования .NET в приложениях на основе JavaScript. С его помощью можно вызывать .NET код из JavaScript, как и наоборот, с помощью .NET WebAssemblyа без зависимости от модели компонентов пользовательского интерфейса Blazor. Проще всего посмотреть на это в действии установив workload "wasm-experimental" и создав новый проект командой "dotnet new wasmbrowser". Данный шаблон создаст проект демонстрирующий как запустить .NET код из JavaScript.
Entity Framework 7 RC 1
Здесь также команда работала над исправлением найденных ошибок и доработкой существующих возможностей.
Дополнительные ссылки
Официальные анонсы от Microsoft можно найти по следующим ссылкам:
Кроме того, доступна следующая дополнительная информация: