用于循环角色并获取角色的第一个字母 MVC 6 的控制器代码

本文关键字:角色 MVC 控制器 代码 第一个 循环 获取 用于 | 更新日期: 2023-09-27 18:32:16

这是我的用户视图模型:

public class UserViewModel
{
    public string UserId { get; set; }
    public string Email { get; set; }
    public string Roles { get; set; }
}

"Roles=RolePrefixes(u.Id)"行为红色。我已经尝试了一切来简单地调用的函数。在我的控制器中,如何调用角色前缀(字符串 id)函数?我说"功能"是因为我不知道该说什么。

  private List<UserViewModel> GetUsers()
    {
      var UserManager =  _serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
        var RoleManager = _serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
        var allRoles = RoleManager.Roles.ToList();
        //var user = UserManager.FindByIdAsync(userID);
        //var usersRoles = UserManager.GetRolesAsync(user);
        return context.Users.Select(u => new UserViewModel
        {
            Email = u.Email,
            UserId = u.Id,
           // THIS WORKS FOR Role Ids but not their Names::: Roles = String.Join("/", u.Roles.Select(r => r.RoleId.First()))

           Roles = RolePrefixes(u.Id) //THIS IS UNDERLINED IN RED.
        }).ToList();
    }

    public async Task<string> RolePrefixes(string id)
    {
        var UserManager = _serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
        //var RoleManager = _serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
        //var allRoles = RoleManager.Roles.ToList();
        var user = await UserManager.FindByIdAsync(id);
        var usersRoles = await UserManager.GetRolesAsync(user);
        string strPrefixes = "";
        foreach (var item in usersRoles)
        {
            strPrefixes += item + "/";
        }
        return strPrefixes;
    }

用于循环角色并获取角色的第一个字母 MVC 6 的控制器代码

投影角色名称,从字符串中选择第一个字符,然后将它们全部连接在一起。

return context.Users.Select(u => new UserViewModel
{
    Email = u.Email,
    UserId = u.Id,
    Roles = String.Join("/", context.Roles.Where(r => r.Users.Any(u2 => u2.UserId == u.Id)).Select(r => r.Name.First()))
}).ToList();