Функция Role Manager не включена.

Получено следующее ProviderException:

Функция Role Manager не включена.

Пока все хорошо.

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

Ответ 1

Вы можете сделать это, прочитав из логического свойства по адресу:

System.Web.Security.Roles.Enabled

Это прямое чтение из атрибута 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

Ответ 2

Если вы пришли сюда, потому что используете новый ASP.NET Identity UserManager, то вы действительно ищете RoleManager:

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

RoleManager предоставит вам доступ, чтобы увидеть, существует ли роль, создает и т.д., а также создается для UserManager

Ответ 3

Я нашел 2 предложения в другом месте через Google, которые предложили a) убедиться, что ваша строка соединения db (та, что использует Роли) верна и что ключ к ней пишется правильно, и b) что установлен флаг Enabled в RoleManager к истине. Надеюсь, одна из этих помогает. Это было для меня.

Вы пытались проверить Roles.Enabled? Кроме того, вы можете проверить Roles.Providers, чтобы узнать, сколько провайдеров доступно, и вы можете проверить Roles.Provider для поставщика по умолчанию. Если он равен нулю, то его не будет.

Ответ 4

Я нашел этот вопрос из-за исключения, упомянутого в нем. У моего Web.Config не было тега <roleManager>. Я понял, что даже если бы я добавил его (как Infotekka предложил), он попал в исключение базы данных. Следуя рекомендациям в других ответах здесь, никто не полностью решил проблему.

Поскольку эти теги Web.Config могут быть автоматически сгенерированы, было бы неправильно решить проблему, добавив их вручную. Если вы находитесь в подобном случае, отмените все изменения, внесенные в Web.Config и в Visual Studio:

  • Нажмите Ctrl + Q, введите nuget и нажмите "Управление пакетами NuGet";
  • Нажмите Ctrl + E, введите провайдеры, и в списке должно появиться "Microsoft ASP.NET Universal Providers Основные библиотеки" и "Microsoft ASP.NET Universal Providers для LocalDB" (оба созданы Microsoft);
  • Нажмите кнопку "Установить" в обоих из них и закройте окно NuGet;
  • Проверьте свой Web.config, и теперь у вас должен быть хотя бы один тег <providers> внутри тегов Profile, Membership, 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 > Таблицы Роли и UsersInRoles таблицы среди вновь созданных таблиц!

Ответ 5

Если вы используете ASP.NET Identity UserManager, вы можете получить его так:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roles = userManager.GetRoles(User.Identity.GetUserId());

Если вы изменили ключ для пользователя от Guid to Int, например, используйте этот код:

var roles = userManager.GetRoles(User.Identity.GetUserId<int>());

Ответ 6

Я должен был установить правильный проект как проект запуска.

Ответ 7

<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>

Ответ 8

попробуйте это в своей веб-конфигурации, это сработало для меня

<configuration>
  <system.web>
    <roleManager enabled="true" />
  </system.web>
</configuration>

Ответ 9

Вот код, который вам нужно вставить в свой Account Controller в MVC5 и более поздних версиях, чтобы получить список ролей пользователя:

csharp public async Task<ActionResult> RoleAdd(string UserID) { return View(await UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList()); }

Нет необходимости использовать Roles.GetRolesForUser() и включать функцию диспетчера ролей.