2014-11-23 5 views
4

Я пытаюсь получить список всех ролей в своем приложении. Я просмотрел следующее сообщение Getting All Users... и другие источники. Вот мой код, который, я думаю, является тем, что я должен делать.Попытка получить все роли в Identity

var roleStore = new RoleStore<IdentityRole>(context) 
var roleMngr = new RoleManager<IdentityRole>(roleStore); 
List<string> roles = roleMngr.Roles.ToList(); 

Однако, я получаю следующее сообщение об ошибке: Не удается неявно преобразовать тип GenericList(IdentityRole) в List(string). Какие-либо предложения? Я пытаюсь получить список, чтобы я мог заполнить выпадающий список на странице регистрации, чтобы назначить пользователя определенной роли. Использование ASPNet 4.5 и системы идентификации 2 (я думаю).

PS Я также пробовал метод Roles.GetAllRoles без успеха.

ответ

12

Посмотрите на свою ссылочную ссылку и спросите ее, ясно, что диспетчер ролей (roleMngr) является типом IdentityRole, так что роли должны быть одного и того же типа, если вы пытаетесь получить список ролей.

Использовать var insted of List<string> или использовать List<IdentityRole>.

var roleStore = new RoleStore<IdentityRole>(context); 
var roleMngr = new RoleManager<IdentityRole>(roleStore); 

var roles = roleMngr.Roles.ToList(); 

Надеюсь, это поможет.

2

Если это список имен ролей строки вы после этого, вы могли бы сделать

List<string> roles = roleMngr.Roles.Select(x => x.Name).ToList(); 

Я лично использую вар, но включал тип здесь, чтобы проиллюстрировать тип возвращаемого значения.

0

Добавление этого, чтобы помочь другим, у кого может быть собственный тип Identity (не по умолчанию string). Если у вас есть, скажем, int, вы можете использовать это:

var roleStore = new RoleStore<AppRole, int, AppUserRole>(dbContext); 
var roleMngr = new RoleManager<AppRole, int>(roleStore); 

public class AppUserRole : IdentityUserRole<int> {} 
public class AppRole : IdentityRole<int, AppUserRole> {} 
Смежные вопросы