ASP. NET Основные претензии не выбираются должным образом - PullRequest
0 голосов
/ 29 апреля 2020

Я создаю приложение в ASP. NET Core 3.1 с Entity Framework 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 всех претензий, которые есть у текущего пользователя. Однако даже после добавления претензий пользователю никаких претензий не отображается. При отладке я обнаружил, что проблема, кажется, в приведенном выше коде EditUser, потому что для утверждений var установлено значение Count = 0 после вызова GetClaimsAsyn c (пользователь). Это значение Count = 0 затем передается в EditUserViewModel и устанавливается в свойство List UserClaims. Но Count = 0 не является допустимым значением, и я не уверен, откуда GetClaimsAsyn c (пользователь) получает значение Count = 0. Как я уже сказал, таблица базы данных, похоже, правильно хранит данные.

Если вам нужен какой-либо код или дополнительные сведения, обязательно дайте мне знать, чтобы мне было легче разобраться.

...