Vous avez le suivant ProviderException :
La fonctionnalité du gestionnaire de rôles n'a pas été activée.
Jusqu'ici tout va bien.
Existe-t-il une méthode qui peut être appelée pour vérifier si le gestionnaire de rôles a été activé ou non?
Vous pouvez le faire en lisant la propriété booléenne à:
System.Web.Security.Roles.Enabled
Ceci est une lecture directe de l'attribut enabled
de l'élément roleManager
dans le 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
Si vous êtes arrivé ici parce que vous utilisez le nouveau ASP.NET
Identity
UserManager
, vous recherchez réellement le RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
vous permettra de savoir si le rôle existe, de créer, etc., en plus de le créer pour le UserManager
J'ai trouvé 2 suggestions ailleurs via Google suggérant a) de s'assurer que votre chaîne de connexion db (celle utilisée par Roles) est correcte et que sa clé est orthographiée correctement, et b) que l'indicateur Enabled sur RoleManager est défini sur true. J'espère que l'un de ces aide. Ça l'a fait pour moi.
Avez-vous essayé de vérifier Roles.Enabled? En outre, vous pouvez vérifier le rôle de Roles.Providers pour connaître le nombre de fournisseurs disponibles, ainsi que le rôle du fournisseur par défaut dans Roles.Provider. Si c'est nul alors il n'y en a pas.
J'ai trouvé cette question en raison de l'exception mentionnée. Mon Web.Config n'avait pas de balise <roleManager>
. J'ai réalisé que même si je l'ai ajouté (comme Infotekka a suggéré ), il s'est retrouvé dans une exception de base de données. Après avoir suivi les suggestions des autres réponses données ici, aucune n’a totalement résolu le problème.
Étant donné que ces balises Web.Config peuvent être générées automatiquement, il a été erroné de les résoudre en les ajoutant manuellement. Si vous vous trouvez dans un cas similaire, annulez toutes les modifications apportées à Web.Config et à Visual Studio:
Vérifiez votre configuration Web et vous devriez maintenant avoir au moins une balise <providers>
à l'intérieur Profil , Appartenance , balises 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>
Ajouter enabled="true"
comme suit:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Presse F6 à construire et maintenant il devrait être OK pour procéder à une mise à jour de base de données sans avoir cette exception:
update-database -verbose
et la méthode Seed fonctionnera correctement (si vous n’avez pas mal joué ailleurs) et créez quelques tables dans votre base de données;Si vous utilisez ASP.NET Identity UserManager
, vous pouvez aussi l'obtenir:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Si vous avez changé de clé pour utilisateur de Guid en Int, par exemple, utilisez ce code:
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());