问题:
我正在开发一个针对 .NET 9 的 Blazor Server 应用程序。我正在使用标准 Cookie 身份验证并尝试配置预渲染的身份验证状态处理。
我的目标是确保在登录后强制重新加载后,首次渲染时用户身份可用。我尝试使用 .NET 8+ 推荐的服务 AddAuthenticationStateSerialization。
但是,当我将以下行添加到我的 Program.cs 时:
// Correctly called directly on builder.Services
builder.Services.AddAuthenticationStateSerialization();
我收到以下编译错误:
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?)
Program.cs相关部分:
这是我的 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();
我尝试过的方法:
- 确认使用 Microsoft.AspNetCore.Components.Authorization; 指令存在。
- 仔细检查了 AddAuthenticationStateSerialization 的拼写。
- 在 Visual Studio 中执行了多个清理解决方案/重建解决方案循环。
- 手动删除 bin 和 obj 文件夹并重建。
我的问题:
为什么编译器在 .NET 9 预览环境中找不到 IServiceCollection 上的 AddAuthenticationStateSerialization 扩展方法?在 .NET 9 预览版中,此方法是否位于不同的命名空间中?它是否可能已被删除/更改?或者我的 SDK 安装或项目引用是否存在问题,导致此类型解析失败?
(可选上下文):我的目标是修复一个常见的 Blazor Server 问题:在成功使用 Cookie 登录并执行了 NavigationManager.NavigateTo(..., forceLoad: true) 后,带有 [Authorize] 的目标页面会重定向回登录页面,因为预渲染组件无法立即识别身份验证状态。遇到此编译错误时,我尝试使用 AddAuthenticationStateSerialization 进行修复。