Otrzymano następujący wyjątek ProviderException :
Funkcja Menedżera ról nie została włączona.
Na razie w porządku.
Czy istnieje metoda, którą można wywołać w celu sprawdzenia, czy Menedżer ról został włączony, czy nie?
c#
asp.net
roleprovider
gsharp
źródło
źródło
web.config
? Próbowałem to włożyćApplication_Start
i jest napisaneThis method can only be called during the application's pre-start initialization phase.
roleManager
jest włączony. Ale teraz dostaję wyjątekUnable to connect to SQL Server database
Jeśli przyjechałeś tutaj, ponieważ używasz nowego
ASP.NET
Identity
UserManager
, to tak naprawdę szukaszRoleManager
:roleManager
da ci dostęp do sprawdzenia, czy rola istnieje, utwórz itp., a także zostanie ona utworzona dlaUserManager
źródło
Znalazłem 2 sugestie w innym miejscu za pośrednictwem Google, które sugerowały: a) upewnienie się, że łańcuch połączenia db (ten, którego używa Role) jest poprawny i że klucz do niego jest napisany poprawnie, oraz b) że flaga Enabled w RoleManager jest ustawiona na true. Mam nadzieję, że jedna z nich pomoże. To mi zrobiło.
Próbowałeś sprawdzić Roles.Enabled? Możesz także sprawdzić Roles.Providers, aby zobaczyć, ilu dostawców jest dostępnych, i możesz sprawdzić Roles.Provider dla domyślnego dostawcy. Jeśli ma wartość zero, nie ma go.
źródło
Znalazłem to pytanie ze względu na wspomniany wyjątek. Mój Web.Config nie miał żadnego
<roleManager>
tagu. Uświadomiłem sobie, że nawet jeśli go dodam (jak sugeruje Infotekka ), skończy się to wyjątkiem bazy danych. Po zastosowaniu się do sugestii zawartych w innych odpowiedziach tutaj żadne z nich nie rozwiązało w pełni problemu.Ponieważ te tagi Web.Config mogą być generowane automatycznie, rozwiązanie problemu polegało na ich ręcznym dodaniu. Jeśli jesteś w podobnym przypadku, cofnij wszystkie zmiany wprowadzone w Web.Config i Visual Studio:
Sprawdź Web.config, a teraz powinieneś mieć co najmniej jeden
<providers>
znacznik wewnątrz znaczników Profile , Membership , SessionState , a także wewnątrz nowego znacznika RoleManager , jak poniżej:Dodaj
enabled="true"
tak:Naciśnij, F6aby zbudować, a teraz powinno być OK, aby przejść do aktualizacji bazy danych bez tego wyjątku:
update-database -verbose
i metoda Seed będzie działać dobrze (jeśli nie pomieszałeś gdzie indziej) i utworzysz kilka tabel w bazie danych;źródło
Jeśli używasz,
ASP.NET Identity UserManager
możesz również uzyskać to w ten sposób:Jeśli na przykład zmieniłeś klucz użytkownika z Guid na Int, użyj tego kodu:
źródło
źródło
Oto kod, który należy umieścić w kontrolerze konta w MVC5 i nowszych wersjach, aby uzyskać listę ról użytkownika:
csharp public async Task<ActionResult> RoleAdd(string UserID) { return View(await UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList()); }
Nie ma potrzeby używania
Roles.GetRolesForUser()
i włączania funkcji Role Manager.źródło