Функция диспетчера ролей не включена



получил следующие ProviderException:




функция диспетчера ролей не включена.




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



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

799   7  

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:

  1. пресс Ctrl+ Q, тип nuget и нажмите на кнопку "Управление пакетами NuGet";
  2. пресс Ctrl+E, тип поставщики и в списке он должен появиться " Microsoft ASP.NET универсальные провайдеры Основные Библиотеки " и " Microsoft ASP.NET универсальные провайдеры для LocalDB" (обе созданы Microsoft);
  3. нажмите на кнопку Установить в обоих из них и закройте окно NuGet;
  4. проверьте свой веб.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>
    
  5. добавить enabled="true" вот так:

    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
    
  6. пресс F6 чтобы построить и теперь он должен быть в порядке, чтобы перейти к обновлению базы данных без этого исключения:

    1. пресс Ctrl+ Q, тип менеджер, нажмите на "консоль диспетчера пакетов";
    2. тип update-database -verbose и метод Seed будет работать просто отлично (если вы не перепутали в другом месте) и создать несколько таблиц в базе данных;
    3. пресс 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

    Ничего не найдено.