首页 > 解决方案 > 如何在 Asp.Net Core 布局中使用用户相关数据?

问题描述

我有一个在 Asp.Net Core 上编写的网站,我想使用与登录用户相关的其他数据。因此,每次用户打开页面时,都会加载此数据。问题是我需要 _Layout.cshtml 中的这些数据,所以我不能使用控制器,也不能使用这样的代码:

@{
    var user = await UserManager.GetUserAsync(User);
    var data = await repository.LoadDataAsync(User?.Id);
    //Data usage...
}

因为每次用户打开具有此布局的页面时都会调用它。我觉得应该有一个简单的解决方案,但我找不到。也许我应该使用缓存?

标签: c#asp.net-corerazor

解决方案


这应该不难。

您可以注入UserManager<TUser>页面并使用如下所示。

@inject UserManager<TheUser> userManager;

但是您要确保在尝试执行任何操作之前用户实际已登录。

因此,您也可以使用SignInManager<TUser>.

@inject SignInManager<TheUser> signInManager;

@

    {
    var user=await userManager.FindByNameAsync(User.Identity.Name);
    }
    if(user!=null && await signInManager.IsSignedInAsync(user)){
    //Do other stuffs with the user.
    }

注意User属性:

获取与执行操作关联的用户的 ClaimsPrincipal。

Microsoft.AspNetCore.Mvc我猜它可以通过它获得。


推荐阅读