Функция диспетчера ролей не включена
получил следующие ProviderException :
функция диспетчера ролей не включена.
пока все хорошо.
есть ли где-нибудь метод, который можно вызвать, чтобы проверить, включен ли диспетчер ролей или нет?
7 ответов
вы можете сделать это, прочитав из свойства boolean по адресу:
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=против 110).aspx
если вы попали сюда, потому что вы используете новый ASP.NET
Identity
UserManager
, то, что вы на самом деле ищете, это RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
даст вам доступ, чтобы увидеть, если существует роль, создать, и т. д., Плюс он создан для UserManager
Я нашел 2 предложения в другом месте через Google, которые предложили a) убедитесь, что ваша строка подключения БД (та, которую используют роли) верна и что ключ к ней написан правильно, и b) что флаг Enabled в RoleManager установлен в true. Надеюсь, один из них поможет. Для меня-да.
вы пытались проверить роли.Включен? Также можно проверить роли.Поставщики, чтобы увидеть, сколько поставщиков доступны, и вы можете проверить роли.Поставщик для поставщика по умолчанию. Если это null тогда нет.
Я нашел этот вопрос из-за исключения упомянутые в нем. Моя Паутина.Config не имел никакого <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>