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?
c#
asp.net
roleprovider
gsharp
la source
la source
web.config
? J'ai essayé de le mettreApplication_Start
et il ditThis method can only be called during the application's pre-start initialization phase.
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 estRoleManager
: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 leUserManager
la source
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.
la source
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 -verbose
et 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;la source
Si vous utilisez,
ASP.NET Identity UserManager
vous 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>());
la source
<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>
la source
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.la source