J'ai obtenu ce qui suit ProviderException :
La fonction Role Manager n'a pas été activée.
Jusqu'à présent, 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 ?
J'ai obtenu ce qui suit ProviderException :
La fonction Role Manager n'a pas été activée.
Jusqu'à présent, 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
C'est une lecture directe de la enabled
de l'attribut roleManager
dans l'élément web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Mise à jour :
Pour plus d'informations, consultez cet échantillon MSDN : https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
Comment puis-je faire cela à partir du code au lieu de web.config
? J'ai essayé de le mettre dans Application_Start
et il est dit This method can only be called during the application's pre-start initialization phase.
Si tu es venu ici parce que tu utilises le nouveau ASP.NET
Identity
UserManager
ce que vous cherchez en fait, c'est l'adresse suivante RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
vous donnera l'accès pour voir si le rôle existe, le créer, etc, de plus il est créé pour l'utilisateur. UserManager
Qu'est-ce que l'enfant de 3 ans a à voir avec tout ça ? J'ai été dirigé vers ce post depuis Google parce que j'avais un problème avec la mise en place de l'identité. Puisque j'ai trouvé la solution... la prochaine personne confrontée au même problème que moi et qui sera amenée ici par Google saura quoi faire...
De plus, l'Identity UserManager dispose d'une fonctionnalité utile pour obtenir les rôles d'un utilisateur donné : UserManager.GetRolesAsync(User.Identity.GetUserId()) ;
Où mettre var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())) ; ?
J'ai trouvé deux suggestions ailleurs via Google qui suggèrent a) de s'assurer que la chaîne de connexion de votre base de données (celle que Roles utilise) est correcte et que la clé est correctement orthographiée, et b) que l'indicateur Enabled de RoleManager est défini sur true. J'espère que l'un de ces éléments vous aidera. C'est le cas 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.
Si vous utilisez ASP.NET Identity UserManager
vous pouvez l'obtenir comme ça aussi :
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Si vous avez changé la clé de l'utilisateur de Guid à Int par exemple, utilisez ce code :
var roles = userManager.GetRoles(User.Identity.GetUserId<int>());
J'ai trouvé cette question en raison de l'exception qui y est mentionnée. Mon Web.Config n'avait pas de <roleManager>
tag. J'ai réalisé que même si je l'ajoutais (en tant que 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 ici, aucune n'a permis de résoudre complètement le problème.
Étant donné que ces balises Web.Config peuvent être générées automatiquement, il ne semblait pas opportun de résoudre le problème 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 :
Pulse Ctrl + Q , type nuget et cliquez sur "Manage NuGet Packages" ;
Pulse Ctrl + E , type fournisseurs et dans la liste, il devrait apparaître "Microsoft ASP.NET Universal Providers". Bibliothèques principales "et "Microsoft ASP.NET Universal Providers pour LocalDB "(tous deux créés par Microsoft) ;
Cliquez sur le bouton Installer dans les deux cas et fermez la fenêtre NuGet ;
Vérifiez votre Web.config et maintenant vous devriez avoir au moins un <providers>
étiquette à l'intérieur Profil , Adhésion , SessionState ainsi que dans les nouvelles balises 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 ça :
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Pulse F6 à Build et maintenant il devrait être OK pour procéder à une mise à jour de la base de données sans avoir cette exception :
update-database -verbose
et la méthode Seed fonctionnera parfaitement (si vous ne vous êtes pas trompé ailleurs) et créera quelques tables dans votre base de données ; Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.