You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server端:登录成功后如何将UserDto对象传至仪表盘页面

Blazor Server 登录后传递 UserDto 到仪表盘的方案

方案一:使用 Scoped 服务(推荐,适合敏感信息)

这是Blazor Server中传递用户状态最常用的方式,Scoped服务在单个用户会话周期内是唯一实例,安全可靠。

  1. 创建用户状态管理服务
public class UserSessionService
{
    public UserDto CurrentUser { get; set; }
}
  1. 在Program.cs中注册为Scoped服务
builder.Services.AddScoped<UserSessionService>();
  1. 登录页面注入服务并赋值
@inject UserSessionService UserSession
@inject NavigationManager NavManager

// 登录逻辑
private async Task HandleLogin()
{
    // 完成身份验证逻辑...
    var userDto = new UserDto { UserName = "xxx", Password = "xxx" };
    UserSession.CurrentUser = userDto;
    NavManager.NavigateTo("/dashboard");
}
  1. 仪表盘页面注入服务并获取数据
@inject UserSessionService UserSession
@code {
    protected override async Task OnInitializedAsync()
    {
        if (UserSession.CurrentUser != null)
        {
            var userName = UserSession.CurrentUser.UserName;
            var password = UserSession.CurrentUser.Password;
            // 执行后续业务逻辑
        }
    }
}

注意:密码属于敏感信息,实际项目中不建议长期存储明文密码,验证通过后应只保留必要的用户标识(如ID、用户名),密码可在验证完成后直接丢弃。

方案二:使用查询字符串(不推荐传递敏感信息)

如果仅需传递非敏感内容(如用户名),可通过导航时附加查询参数实现:

  1. 登录页面导航时拼接参数
var userName = "xxx";
// 绝对不要将密码放入查询参数,存在泄露风险
NavManager.NavigateTo($"/dashboard?username={Uri.EscapeDataString(userName)}");
  1. 仪表盘页面解析查询参数
@inject NavigationManager NavManager
@code {
    protected override void OnInitialized()
    {
        var uri = new Uri(NavManager.Uri);
        var userName = System.Web.HttpUtility.ParseQueryString(uri.Query).Get("username");
        // 处理获取到的用户名
    }
}

方案三:使用 ProtectedSessionStorage(适合持久化用户状态)

如果需要页面刷新后仍保留用户信息,可使用Blazor Server提供的加密存储方案:

  1. 注入ProtectedSessionStorage
@inject ProtectedSessionStorage SessionStorage
@inject NavigationManager NavManager
  1. 登录页面保存UserDto
private async Task HandleLogin()
{
    var userDto = new UserDto { UserName = "xxx", Password = "xxx" };
    await SessionStorage.SetAsync("CurrentUser", userDto);
    NavManager.NavigateTo("/dashboard");
}
  1. 仪表盘页面读取数据
@inject ProtectedSessionStorage SessionStorage
@code {
    protected override async Task OnInitializedAsync()
    {
        var result = await SessionStorage.GetAsync<UserDto>("CurrentUser");
        if (result.Success && result.Value != null)
        {
            var userName = result.Value.UserName;
            var password = result.Value.Password;
        }
    }
}

同样,敏感的密码信息不建议持久化存储,验证通过后应及时清除。

内容的提问来源于stack exchange,提问作者ahmed abdelaziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:12:16