C# 如何在MVC5中获得角色公正的用户

C# 如何在MVC5中获得角色公正的用户,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我想获得仅限角色用户在mvc中,我尝试了一切。正如您所知,AspNetUserRoles是一个映射表(多对多),因此它不是在EDMX中生成的(根据设计,它没有主键)。此外,我们不能使用角色表(?)。请考虑我的模型。 这是我最后一次尝试: public async Task<ActionResult> Roles() { var list = context.Users.Include(u => u.Roles); var user

我想获得仅限角色用户在mvc中,我尝试了一切。正如您所知,
AspNetUserRoles
是一个映射表(多对多),因此它不是在EDMX中生成的(根据设计,它没有主键)。此外,我们不能使用角色表()。请考虑我的模型。

这是我最后一次尝试:

    public async Task<ActionResult> Roles()
    {
        var list = context.Users.Include(u => u.Roles);
        var user = new List<ApplicationUser>();
        foreach(var u in list)
        {
            if(u.Roles!= null)
            {
                user.Add(u);
            }
        }     
        return View(user);
    }
公共异步任务角色()
{
var list=context.Users.Include(u=>u.Roles);
var user=新列表();
foreach(列表中的变量u)
{
如果(u.Roles!=null)
{
用户。添加(u);
}
}     
返回视图(用户);
}
以下是我的观点:

    @model IEnumerable<Site.Models.ApplicationUser>
      @{
        Layout = null;
       }

       <h2>List of users with Roles:</h2>
       <table class="table">
      <tr>
       <th>
           @Html.DisplayNameFor(model => model.UserName)
       </th>
       <th>
          @Html.DisplayNameFor(model => model.Email)
       </th>
       <th>
          @Html.DisplayNameFor(model => model.Roles)
      </th>
   </tr>
   @foreach (var item in Model)
   {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.UserName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email)
        </td>
        <th>
            @Html.DisplayFor(modelItem => item.Roles)
        </th>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
            @Html.ActionLink("Details", "Details", new { id = item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.Id })
        </td>
    </tr>
  }
   </table>
@model IEnumerable
@{
布局=空;
}
具有角色的用户列表:
@DisplayNameFor(model=>model.UserName)
@DisplayNameFor(model=>model.Email)
@DisplayNameFor(model=>model.Roles)
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.UserName)
@DisplayFor(modelItem=>item.Email)
@DisplayFor(modelItem=>item.Roles)
@ActionLink(“编辑”,“编辑”,新的{id=item.id})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.id})|
@ActionLink(“删除”,“删除”,新的{id=item.id})
}
试试这个:

    var usersList = new List<ApplicationUser>();
    foreach (ApplicationUser user in UserManager.Users)
    {
        var roles = await UserManager.GetRolesAsync(user.Id);
        if(roles.contains("Admin"))
        {
            usersList.Add(user);
        }
    }
var usersList=new List();
foreach(UserManager.Users中的ApplicationUser用户)
{
var roles=await UserManager.GetRolesAsync(user.Id);
if(roles.contains(“Admin”))
{
usersList.Add(用户);
}
}
这应该只返回具有管理员角色的用户。希望有帮助。

试试这个:

    var usersList = new List<ApplicationUser>();
    foreach (ApplicationUser user in UserManager.Users)
    {
        var roles = await UserManager.GetRolesAsync(user.Id);
        if(roles.contains("Admin"))
        {
            usersList.Add(user);
        }
    }
var usersList=new List();
foreach(UserManager.Users中的ApplicationUser用户)
{
var roles=await UserManager.GetRolesAsync(user.Id);
if(roles.contains(“Admin”))
{
usersList.Add(用户);
}
}

这应该只返回具有管理员角色的用户。我希望这会有所帮助。

我认为您应该根据特定角色进行查询。 因为如果以后添加更多角色,应用程序将出现错误

public async Task<ActionResult> Roles()
    {
        var user= context.Users.Include(u => u.Roles).Where(u=>u.Roles.Any(r=>r.Name=="RoleName")).ToList();
        return View(user);
    }
公共异步任务角色()
{
var user=context.Users.Include(u=>u.Roles).Where(u=>u.Roles.Any(r=>r.Name==“RoleName”).ToList();
返回视图(用户);
}

我认为您应该根据特定角色进行查询。 因为如果以后添加更多角色,应用程序将出现错误

public async Task<ActionResult> Roles()
    {
        var user= context.Users.Include(u => u.Roles).Where(u=>u.Roles.Any(r=>r.Name=="RoleName")).ToList();
        return View(user);
    }
公共异步任务角色()
{
var user=context.Users.Include(u=>u.Roles).Where(u=>u.Roles.Any(r=>r.Name==“RoleName”).ToList();
返回视图(用户);
}

那么问题出在哪里?您没有获取具有任何角色的用户?我希望仅获取角色内用户,但此代码获取所有用户。如果将
if(u.Roles!=null)
更改为
if(u.Roles.any())
?“仅获取角色内用户”是指仅在特定角色中?那是哪个角色?您没有指定任何内容。那么问题是什么?您没有获取具有任何角色的用户?我希望仅获取角色内用户,但此代码获取所有用户。如果将
if(u.Roles!=null)
更改为
if(u.Roles.any())
?“仅获取角色内用户”是指仅在特定角色中?那是哪个角色?您没有指定任何角色,因此可能所有用户都至少有一个角色?;)你试过调试吗,当用户没有任何角色时会返回什么?我在我的站点和数据库的AspNetRoles表中只有admin角色请告诉我当您尝试调试应用程序时会发生什么:)可能在aspnet中是默认的视图在角色位置显示所有用户,在admin user前面显示admin user键可能所有用户都有至少一个角色?;)您是否尝试过调试,当用户没有任何角色时会返回什么?我在我的站点和数据库的AspNetRoles表中只有admin角色。请告诉我当您尝试调试应用程序时会发生什么:)可能在aspnet中是默认的视图显示所有用户,在admin user前面的role位置显示admin用户密钥