Start Debugging

Blazor static SSR получает [SupplyParameterFromSession] в .NET 11 Preview 5

Чтение состояния сессии в статически серверно отрендеренном Blazor означало обращение к HttpContext.Session и сериализацию вручную. .NET 11 Preview 5 добавляет [SupplyParameterFromSession] для привязки свойства компонента напрямую к ключу сессии.

.NET 11 Preview 5, выпущенный 2026-06-09, дополняет семейство атрибутов “supply parameter from X”, которые статический серверный рендеринг (static SSR) в Blazor уже имел для строк запроса и данных формы. Новый из них — [SupplyParameterFromSession], и он привязывает свойство компонента к ключу в серверной сессии ASP.NET Core. Если вы когда-нибудь переносили состояние многошагового мастера через загрузки страниц static SSR, вы понимаете, почему это важно.

Почему сессия была неудобной

Static SSR рендерит обычный HTML без circuit SignalR и без payload WebAssembly, поэтому нет состояния компонента в памяти, которое переживает навигацию. Blazor уже давал типизированный, декларативный доступ к двум очевидным входным данным на запрос: [SupplyParameterFromQuery] для URL и [SupplyParameterFromForm] для тела POST. Сессия была пробелом. Чтобы прочитать её, вы каскадировали HttpContext в компонент и проходили через HttpContext.Session сами, со строками ключей вручную и сериализацией вручную с обеих сторон:

@inject IHttpContextAccessor Http

@code {
    private int CurrentStep;

    protected override void OnInitialized()
    {
        var raw = Http.HttpContext?.Session.GetString("checkout-step");
        CurrentStep = raw is null ? 0 : JsonSerializer.Deserialize<int>(raw);
    }
}

Каждый компонент, который обращался к сессии, повторял эту церемонию, а строка ключа была контрактом на основе строк, готовым разойтись.

Что заменяет атрибут

Preview 5 сворачивает чтение до объявления свойства. Атрибут принимает Name для ключа сессии и использует System.Text.Json для сериализации и десериализации значения, поэтому он работает для любого типа, который можно преобразовать в JSON, а не только для строк:

@code {
    [SupplyParameterFromSession(Name = "checkout-step")]
    public int CurrentStep { get; set; }
}

Фреймворк читает checkout-step из сессии, десериализует его в int и присваивает до рендеринга компонента. Присваивание обратно свойству записывает новое значение в сессию, поэтому мастер может перейти к следующему шагу одной строкой вместо танца «получить, изменить, сериализовать, записать».

Инфраструктура — это стандартный middleware сессии ASP.NET Core, поэтому вы по-прежнему настраиваете его в Program.cs:

builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

// ...
app.UseSession();

Где это уместно

Это один из нескольких проходов по отточке static SSR в Preview 5. Он естественно сочетается с валидацией на стороне клиента для форм static SSR, которая появилась в том же выпуске: привяжите рабочее состояние формы к ключу сессии, валидируйте в браузере и сохраняйте дешёвый режим рендеринга на протяжении всего процесса оформления заказа. Сортировка и пагинация QuickGrid теперь тоже работают в static SSR, поэтому шаблон «интерактивное ощущение, ноль circuit» продолжает расширяться.

Чтобы попробовать, установите SDK .NET 11 Preview 5, нацельтесь на net11.0 и просмотрите заметки о выпуске ASP.NET Core Preview 5 для полного списка.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад