Получил следующее ProviderException :
Функция Role Manager не была включена.
Все идет нормально.
Есть ли где-нибудь метод, который можно вызвать, чтобы проверить, был ли включен Role Manager или нет?
Получил следующее ProviderException :
Функция Role Manager не была включена.
Все идет нормально.
Есть ли где-нибудь метод, который можно вызвать, чтобы проверить, был ли включен Role Manager или нет?
Ответы:
Вы можете сделать это, прочитав логическое свойство по адресу:
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
roleManager
включен. Но сейчас я получаю исключениеUnable to connect to SQL Server database
Если вы попали сюда, потому что используете новое ASP.NET
Identity
UserManager
, то, что вы на самом деле ищете, это RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
даст вам доступ, чтобы увидеть, существует ли роль, создать и т. д., плюс она создана для UserManager
В другом месте через Google я нашел 2 предложения, в которых предлагалось: а) убедиться, что ваша строка соединения с БД (та, которую использует Роли) правильная, и что ключ к ней написан правильно, и б) что флаг Enabled на RoleManager установлен в true. Надеюсь, что один из тех помогает. Это для меня.
Вы пытались проверить Roles.Enabled? Кроме того, вы можете проверить Roles.Provider, чтобы увидеть, сколько поставщиков доступно, и вы можете проверить Roles.Provider для поставщика по умолчанию. Если это ноль, то нет ни одного.
Я нашел этот вопрос из-за исключения, упомянутого в нем. В моем Web.Config не было <roleManager>
тега. Я понял, что даже если я добавлю его (как предложил Infotekka ), он окажется в исключении базы данных. После следования предложениям в других ответах здесь ни один полностью не решил проблему.
Так как эти теги Web.Config могут быть сгенерированы автоматически, было бы неправильно решить их, добавив их вручную. Если вы находитесь в аналогичном случае, отмените все изменения, внесенные в Web.Config и в Visual Studio:
Проверьте свой 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">
Нажмите F6Build, и теперь все должно быть в порядке, чтобы перейти к обновлению базы данных без этого исключения:
update-database -verbose
и метод Seed будут работать очень хорошо (если вы ни разу не перепутали) и создадут несколько таблиц в вашей базе данных;Если вы используете, 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>());
<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>
Вот код, который вам нужно вставить в свой Account Controller в MVC5 и более поздних версиях, чтобы получить список ролей пользователя:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Нет необходимости использовать Roles.GetRolesForUser()
и включать функцию Role Manager.
web.config
? Я попытался вставить это,Application_Start
и это говоритThis method can only be called during the application's pre-start initialization phase.