【发布时间】:2018-01-08 14:25:00
【问题描述】:
您好,我正在使用 Identity 和自定义用户类和 EF Core 构建 API。 我想获取属于用户的角色的名称。 表格的图表如下(忽略用户声明和用户登录):
正如您所见,角色和用户是 N 到 N,因此 Identity 在内部创建了一个名为 UserRoles 的联结表,我的控制器如下所示:
Route ("api/[controller]")]
public class UserController : Controller {
private readonly DBContext _db;
private readonly UserManager<Usuario> _userManager;
public UserController (DBContext db, UserManager<Usuario> userManager) {
this._db = db;
}
[HttpGet ("GetUserById/{id}", Name = "GetUserById")]
public async Task<IActionResult> GetUserById (string id) {
try {
var user = await this._db.Users.Where (x => x.Id == id).Include (x => x.Roles).FirstOrDefaultAsync ();
if (user == null) {
return NotFound ();
}
return Ok (user);
} catch (Exception e) {
Console.WriteLine (e.Message);
return BadRequest ();
}
}
当我在 Postman 中调用它时,我得到以下响应:
正如你在角色部分看到的那样,我得到的只是:
"roles": [
{
"userId": "d88b0c2d-25c5-4da9-ad05-45f69dec67ff",
"roleId": "a83a60ca-f011-43ce-be3d-8b71403aa86e"
}
]
该数据属于联结表而不是角色表本身,我不想要。
我真正想要的是“真正的”角色表数据,知道如何实现吗?
在 sql 中会是这样的:
select *
from AspNetUsers as a,AspNetUserRoles as b,AspNetRoles as c
where a.Id = b.UserId and b.RoleId= c.Id
【问题讨论】:
-
微软官方文档中也解释了一个解决方案:docs.microsoft.com/en-us/aspnet/core/security/authentication/…
标签: c# asp.net-core entity-framework-core asp.net-core-webapi