Start Debugging

Blazor SSR finalmente ganha TempData no .NET 11

ASP.NET Core no .NET 11 Preview 2 traz TempData para a renderização estática do lado servidor do Blazor, habilitando mensagens flash e fluxos Post-Redirect-Get sem workarounds.

Se você construiu aplicações Blazor SSR estáticas, quase certamente bateu na mesma parede: depois de um POST de formulário que redireciona, não há jeito embutido de passar uma mensagem única para a próxima página. MVC e Razor Pages tiveram TempData por mais de uma década. Blazor SSR não, até o .NET 11 Preview 2.

Como o TempData funciona no Blazor SSR

Quando você chama AddRazorComponents() no seu Program.cs, TempData é registrado automaticamente. Sem fiação de serviço extra. Dentro de qualquer componente SSR estático, capture-o como um parâmetro em cascata:

@code {
    [CascadingParameter]
    public ITempData? TempData { get; set; }

    private void HandleSubmit()
    {
        // Store a flash message before redirecting
        TempData?.Set("StatusMessage", "Record saved.");
        Navigation.NavigateTo("/dashboard", forceLoad: true);
    }
}

Na página de destino, leia o valor. Uma vez que você chama Get, a entrada é removida do armazenamento:

@code {
    [CascadingParameter]
    public ITempData? TempData { get; set; }

    private string? StatusMessage;

    protected override void OnInitialized()
    {
        StatusMessage = TempData?.Get<string>("StatusMessage");
    }
}

Esse é o padrão clássico Post-Redirect-Get, e agora funciona no Blazor SSR sem gerenciamento de estado personalizado.

Peek e Keep

ITempData fornece quatro métodos que espelham o ciclo de vida do TempData do MVC:

Estes te dão controle sobre se uma mensagem flash desaparece depois de uma leitura ou permanece para um segundo redirecionamento.

Provedores de armazenamento

Por padrão, o TempData é baseado em cookie via CookieTempDataProvider. Os valores são criptografados com o ASP.NET Core Data Protection, então você ganha proteção contra adulteração de saída. Se você preferir armazenamento do lado do servidor, troque para SessionStorageTempDataProvider:

builder.Services.AddSession();
builder.Services
    .AddSingleton<ITempDataProvider, SessionStorageTempDataProvider>();

A pegadinha: só SSR estático

TempData não funciona com os modos de renderização Blazor Server interativo ou Blazor WebAssembly. Está limitado a SSR estático, onde cada navegação é uma requisição HTTP completa. Para cenários interativos, PersistentComponentState ou seu próprio estado em cascata continuam sendo as ferramentas certas.

Essa é uma pequena adição, mas remove uma das reclamações comuns “por que o Blazor não pode fazer o que Razor Pages pode?”. Pegue .NET 11 Preview 2 e experimente no seu próximo fluxo de formulário SSR.

< Voltar