Vous avez le ProviderException suivant :
La fonctionnalité Gestionnaire de rôles n'a pas été activée.
Jusqu'ici tout va bien.
Existe-t-il quelque part une méthode qui peut être appelée pour vérifier si le gestionnaire de rôles a été activé ou non?
Vous avez le ProviderException suivant :
La fonctionnalité Gestionnaire de rôles n'a pas été activée.
Jusqu'ici tout va bien.
Existe-t-il quelque part une méthode qui peut être appelée pour vérifier si le gestionnaire de rôles a été activé ou non?
Réponses:
Vous pouvez le faire en lisant la propriété booléenne à l'adresse:
System.Web.Security.Roles.Enabled
Il s'agit d'une lecture directe de l' enabledattribut de l' roleManagerélément dans web.config:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Mise à jour:
pour plus d'informations, consultez cet exemple MSDN: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager est activé. Mais maintenant, je reçois une exceptionUnable to connect to SQL Server database
Si vous êtes arrivé ici parce que vous utilisez le nouveau ASP.NET Identity UserManager, ce que vous recherchez est RoleManager:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager vous donnera accès pour voir si le rôle existe, créer, etc., plus il est créé pour le UserManager
J'ai trouvé 2 suggestions ailleurs via Google qui suggéraient a) de s'assurer que votre chaîne de connexion db (celle que Roles utilise) est correcte et que la clé est correctement orthographiée, et b) que l'indicateur Activé sur RoleManager est défini sur true. J'espère que l'une de ces aides. Ça l'a fait pour moi.
Avez-vous essayé de vérifier Roles.Enabled? Vous pouvez également vérifier Roles.Providers pour voir combien de fournisseurs sont disponibles et vous pouvez vérifier Roles.Provider pour le fournisseur par défaut. S'il est nul, il n'y en a pas.
J'ai trouvé cette question en raison de l'exception qui y est mentionnée. Mon Web.Config n'avait aucune <roleManager>balise. J'ai réalisé que même si je l'ai ajouté (comme le suggérait Infotekka ), il se retrouvait dans une exception de base de données. Après avoir suivi les suggestions des autres réponses ici, aucune n'a complètement résolu le problème.
Étant donné que ces balises Web.Config peuvent être générées automatiquement, il n'a pas été judicieux de les résoudre en les ajoutant manuellement. Si vous êtes dans un cas similaire, annulez toutes les modifications que vous avez apportées à Web.Config et dans Visual Studio:
Vérifiez votre Web.config et vous devriez maintenant avoir au moins une <providers>balise à l'intérieur des balises Profile , Membership , SessionState et également à l'intérieur de la nouvelle balise RoleManager , comme ceci:
<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>
Ajoutez enabled="true"comme ceci:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Appuyez sur F6pour construire et maintenant il devrait être OK pour procéder à une mise à jour de la base de données sans avoir cette exception:
update-database -verboseet la méthode Seed fonctionnera très bien (si vous n'avez pas joué ailleurs) et créez quelques tables dans votre base de données;Si vous utilisez, ASP.NET Identity UserManagervous pouvez également l'obtenir comme ceci:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Si vous avez changé la clé pour l'utilisateur de Guid à Int par exemple, utilisez ce code:
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>
Voici le code que vous devez mettre dans votre contrôleur de compte dans MVC5 et versions ultérieures pour obtenir la liste des rôles d'un utilisateur:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Il n'est pas nécessaire d'utiliser Roles.GetRolesForUser()et d'activer la fonction Role Manager.
web.config? J'ai essayé de le mettreApplication_Startet il ditThis method can only be called during the application's pre-start initialization phase.