Andrey on .NET | .NET 7 Release Candidate 1

.NET 7 Release Candidate 1

.NET logoНаряду с выходом очередных стабильных поддерживаемых версий .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. Для использования этой возможности необходимо:

  • Добавить в проект пакет Microsoft.AspNetCore.Grpc.Swagger версии не менее 0.3.0-xxx.
  • Сконфигурировать поддержку в Swashbuckle:
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 можно найти по следующим ссылкам:

Кроме того, доступна следующая дополнительная информация:

Добавить комментарий