asp.net-core - ASP.NET Core 声明未正确获取
问题描述
我正在使用 Entity Framework Core 3.1 在 ASP.NET Core 3.1 中构建一个应用程序,并且在调试授权时遇到了一些问题。目前,我正在研究基于声明的授权,如下面的代码示例所示。
在 AdminController 中:
public async Task<IActionResult> EditUser(string id)
{
var user = await _userManager.FindByIdAsync(id);
if (user == null)
return RedirectToAction("UserManagement", _userManager.Users);
var claims = await _userManager.GetClaimsAsync(user);
var vm = new EditUserViewModel()
{
Id = user.Id,
UserClaims = claims.Select(c => c.Value).ToList(),
Email = user.Email,
UserName = user.UserName,
Birthdate = user.Birthdate,
City = user.City,
Country = user.Country
};
return View(vm);
}
当我单击应用程序管理部分中用户旁边的编辑按钮时,将调用此函数。我遇到的问题在于索赔。我有能力向用户添加声明,但在代码中的某处它无法正常工作。调试时,似乎一切正常,在向用户添加声明后,数据库表 AspNetUserClaims 确实包含正确的数据,但上面的函数有一个错误,我将尝试描述。
基本上,在 EditUser View 页面上,应该有当前用户拥有的所有声明的 HTML ul。但是,即使在向用户添加声明后,也不会显示 ul 声明。调试时发现问题似乎出在上面的EditUser代码中,因为调用GetClaimsAsync(user)后var claim被设置为Count=0。然后将此 Count=0 的值传递给 EditUserViewModel 并设置为 List 属性 UserClaims。但是 Count=0 不是任何合法值,我不确定 GetClaimsAsync(user) 从哪里得到 Count=0。正如我所说,数据库表似乎正确地存储了数据。
如果您需要更多代码或更多详细信息,请务必让我知道,以便我使事情更容易理解。
解决方案
推荐阅读
- javascript - 数组排序问题 - Codewars Kata“组织循环赛”
- upc - 伯克利 UPC 编译器错误 upcc: error running '/bin/gmake --no-print-directory' to link application
- android - 更新数据库后如何在 Recyclerview 外更新 TextView
- oracle - 测试连接时 OLEDB Oracle 11g 的集成服务错误
- python - 如何在 matplotlib.pyploy 中显示变量平均值的线和 95% 上限的线
- javascript - Laravel vue axios 不返回 response.data
- tinymce - TinyMCE 5:可以忽略的自动完成功能,因此您只需键入自己的条目
- reactjs - 用 GO 编写的 gRPC 服务集合与 Javascript 客户端之间通信的最佳解决方案是什么?
- ios - ios13下svg图片变色问题
- terraform - terraform replace() - “str”参数的值无效:需要字符串