首页 > 解决方案 > 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。正如我所说,数据库表似乎正确地存储了数据。

如果您需要更多代码或更多详细信息,请务必让我知道,以便我使事情更容易理解。

标签: asp.net-coreentity-framework-coreasp.net-core-mvc

解决方案


推荐阅读