Функция диспетчера ролей не включена
получил следующие ProviderException:
функция диспетчера ролей не включена.
пока все хорошо.
есть ли где-нибудь метод, который можно вызвать, чтобы проверить, включен ли диспетчер ролей или нет?
7 ответов:
вы можете сделать это, прочитав из логического свойства по адресу:
System.Web.Security.Roles.EnabledЭто прямое чтение из на
roleManagerв элементеweb.config:<configuration> <system.web> <roleManager enabled="true" /> </system.web> </configuration>
обновление:
Для получения дополнительной информации ознакомьтесь с этим образцом MSDN:https://msdn.microsoft.com/en-us/library/aa354509 (v=vs. 110). aspx
если вы попали сюда, потому что вы используете новый
ASP.NETIdentityUserManager, то, что вы на самом деле ищете этоRoleManager:var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManagerдаст вам доступ, чтобы увидеть, если существует роль, создать, и т. д., Плюс он создан дляUserManager
Я нашел 2 предложения в другом месте через Google, которые предложили: а) убедитесь, что ваш DB connectionstring (тот, который использует роли) правильный и что ключ к нему написан правильно, и Б) что флаг Enabled на RoleManager установлен в true. Надеюсь, что один из них поможет. Для меня так и было.
вы пробовали проверять роли.Включен? Кроме того, вы можете проверить роли.Поставщики, чтобы увидеть, сколько поставщиков доступны, и вы можете проверить роли.Поставщик для поставщика по умолчанию. Если это null тогда нет.
Я нашел этот вопрос из-за исключения упомянутые в нем. Моя Паутина.Конфиг не было никакого
<roleManager>тег. Я понял, что даже если я добавил его (как Infotekka предложил), он оказался в исключении базы данных. После выполнения предложений в других ответах здесь, ни один полностью не решил проблему.так как эти веб.Теги конфигурации могут быть автоматически сгенерированы,было неправильно решать их вручную, добавляя их. Если вы находитесь в аналогичном случае, отменить все изменения вы попали в Сеть.Config и в Visual Studio:
- пресс Ctrl+ Q, тип nuget и нажмите на кнопку "Управление пакетами NuGet";
- пресс Ctrl+E, тип поставщики и в списке он должен появиться " Microsoft ASP.NET универсальные провайдеры Основные Библиотеки " и " Microsoft ASP.NET универсальные провайдеры для LocalDB" (обе созданы Microsoft);
- нажмите на кнопку Установить в обоих из них и закройте окно NuGet;
проверьте свой веб.config и теперь у вас должен быть хотя бы один
<providers>бирка внутри профиль,членство,SessionState теги, а также внутри нового RoleManager тег, как это:<roleManager defaultProvider="DefaultRoleProvider"> <providers> <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=NUMBER" connectionStringName="DefaultConnection" applicationName="/" /> </providers> </roleManager>добавить
enabled="true"вот так:<roleManager defaultProvider="DefaultRoleProvider" enabled="true">пресс F6 чтобы построить и теперь он должен быть в порядке, чтобы перейти к обновлению базы данных без этого исключения:
- пресс Ctrl+ Q, тип менеджер, нажмите на "консоль диспетчера пакетов";
- тип
update-database -verboseи метод Seed будет работать просто отлично (если вы не перепутали в другом месте) и создать несколько таблиц в базе данных;- пресс Ctrl+ W+L чтобы открыть Проводник сервера и вы должны быть в состоянии проверить в Подключения К Данным > DefaultConnection > Таблицы the роли и UsersInRoles таблицы среди вновь созданных таблиц!
Если вы используете
ASP.NET Identity UserManagerвы можете получить его так же:var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); var roles = userManager.GetRoles(User.Identity.GetUserId());Если вы изменили ключ для пользователя с Guid на Int, например, используйте этот код:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
попробуйте это на веб-конфигурации это сработало для меня
<configuration> <system.web> <roleManager enabled="true" /> </system.web> </configuration>
<roleManager enabled="true" cacheRolesInCookie="false" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" defaultProvider="AspNetSqlRoleProvider" createPersistentCookie="false" maxCachedResults="25"> <providers> <clear /> <add connectionStringName="MembershipConnection" applicationName="Mvc3" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add applicationName="Mvc3" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </providers> </roleManager>
Comments