在 BlazorServer 页面获取 ApplicationUser

问题描述 投票:0回答:1

我正在尝试访问 Blazor Server .NET 8 应用程序中当前登录用户的 ApplicationUser 。我在 /Account/ISP 中添加了一个名为 Index.razor 的新页面

@page "/Account/ISP"
@using Microsoft.AspNetCore.Identity
@using WebApp.Components.Account.Shared
@using WebApp.Data

@inject UserManager<ApplicationUser> UserManager
@inject SignInManager<ApplicationUser> SignInManager
@inject IdentityUserAccessor UserAccessor
@inject IdentityRedirectManager RedirectManager
@inject ApplicationDbContext DbContext


@code {
    private ApplicationUser user = default!;

    [CascadingParameter]
    private HttpContext HttpContext { get; set; } = default!;

    protected override async Task OnInitializedAsync()
    {
        user = await UserAccessor.GetRequiredUserAsync(HttpContext);
    }
}

在这里,我尝试复制让我的用户进入

Account/Manage
的逻辑,它在创建的 Blazor 模板中运行良好。登录后,我单击菜单项导航到此页面,在这里我得到
NullReferenceException
,没有堆栈跟踪。我做错了什么?

asp.net-core authentication blazor asp.net-identity blazor-server-side
1个回答
0
投票

“httpcontext”仅在 SSR 渲染模式下可用。使用InteractiveServer 时其值为null。如果您检查模板,您会发现它将所有启动的页面设置为

App.razor
中的 SSR 渲染模式,如下所示:

...
<Routes @rendermode="RenderModeForPage" />
...
@code {
    [CascadingParameter]
    private HttpContext HttpContext { get; set; } = default!;

    private IComponentRenderMode? RenderModeForPage => HttpContext.Request.Path.StartsWithSegments("/Account")
        ? null
        : InteractiveServer;
}

(当渲染模式设置为null时,就是使用SSR)
参考:https://learn.microsoft.com/en-us/aspnet/core/blazor/components/render-modes?view=aspnetcore-8.0#area-folder-of-static-ssr-components

© www.soinside.com 2019 - 2024. All rights reserved.