Emitir:
Estou desenvolvendo um aplicativo Blazor Server direcionado ao .NET 9. Estou usando a autenticação de cookie padrão e tentando configurar o tratamento do estado de autenticação para pré-renderização.
Meu objetivo é garantir que a identidade do usuário esteja disponível durante a renderização inicial após uma reinicialização forçada após o login. Tentei usar o serviço AddAuthenticationStateSerialization recomendado para .NET 8+.
Entretanto, quando adiciono a seguinte linha ao meu Program.cs:
// Correctly called directly on builder.Services
builder.Services.AddAuthenticationStateSerialization();
Recebo o seguinte erro de compilação:
Error CS1061: 'IServiceCollection' does not contain a definition for 'AddAuthenticationStateSerialization' and no accessible extension method 'AddAuthenticationStateSerialization' accepting a first argument of type 'IServiceCollection' could be found (are you missing a using directive or an assembly reference?)
Seção relevante do Program.cs:
Aqui está a parte relevante da minha configuração do Program.cs:
// Program.cs
// Necessary using directive IS present at the top:
using Microsoft.AspNetCore.Components.Authorization;
// Other standard using directives...
var builder = WebApplication.CreateBuilder(args);
// ... other services (HttpClient, DbContextFactory, Antiforgery, HttpContextAccessor etc.)
// Blazor / interactive components + Auth State Handling
builder.Services
.AddRazorComponents()
.AddInteractiveServerComponents(); // Adds interactive server services
// Trying to add state serialization here:
builder.Services.AddAuthenticationStateSerialization(); // <--- ERROR CS1061 HERE
// Keep cascading state
builder.Services.AddCascadingAuthenticationState();
// Conflicting/redundant lines are commented out:
// //builder.Services.AddServerSideBlazor();
// //builder.Services.AddScoped<AuthenticationStateProvider, ServerAuthenticationStateProvider>();
// Cookie authentication setup
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(o =>
{
o.LoginPath = "/login";
// ... other cookie options ...
});
builder.Services.AddAuthorization(o => { /* ... policies ... */ });
// ... rest of service registrations ...
var app = builder.Build();
// ... middleware pipeline (UseAuthentication, UseAuthorization, UseAntiforgery etc.) ...
// Map components
app.MapRazorComponents<App>()
.AddInteractiveServerRenderMode(); // Server endpoints enabled
// ... rest of Program.cs ...
app.Run();
O que eu tentei:
- Confirmado que a diretiva using Microsoft.AspNetCore.Components.Authorization; está presente.
- Verifiquei novamente a ortografia de AddAuthenticationStateSerialization.
- Realizou vários ciclos de Limpeza de Solução/Reconstrução de Solução no Visual Studio.
- Excluí manualmente as pastas bin e obj e reconstruí.
Minha pergunta:
Por que o compilador não consegue encontrar o método de extensão AddAuthenticationStateSerialization em IServiceCollection neste ambiente de visualização do .NET 9? Este método está localizado em um namespace diferente nas visualizações do .NET 9, pode ter sido removido/alterado ou pode haver um problema com a instalação do meu SDK ou com as referências do projeto que estão causando essa falha na resolução de tipos?
(Contexto opcional): Meu objetivo subjacente era corrigir um problema comum no Blazor Server em que, após um login bem-sucedido com cookie e um NavigationManager.NavigateTo(..., forceLoad: true), a página de destino com [Authorize] redirecionava de volta para o login porque o componente pré-renderizado não reconhecia o estado de autenticação imediatamente. AddAuthenticationStateSerialization era a correção recomendada que eu estava tentando implementar quando encontrei este erro de compilação.