Erhielt die folgende ProviderException :
Die Rollenmanagerfunktion wurde nicht aktiviert.
So weit, ist es gut.
Gibt es irgendwo eine Methode, mit der überprüft werden kann, ob der Rollenmanager aktiviert wurde oder nicht?
Erhielt die folgende ProviderException :
Die Rollenmanagerfunktion wurde nicht aktiviert.
So weit, ist es gut.
Gibt es irgendwo eine Methode, mit der überprüft werden kann, ob der Rollenmanager aktiviert wurde oder nicht?
Antworten:
Sie können dies tun, indem Sie aus der booleschen Eigenschaft unter folgender Adresse lesen:
System.Web.Security.Roles.Enabled
Dies ist ein direkter Lesevorgang aus dem enabled
Attribut des roleManager
Elements in web.config
:
<configuration>
<system.web>
<roleManager enabled="true" />
</system.web>
</configuration>
Update:
Weitere Informationen finden Sie in diesem MSDN-Beispiel: https://msdn.microsoft.com/en-us/library/aa354509(v=vs.110).aspx
roleManager
ist aktiviert. Aber jetzt Unable to connect to SQL Server database
Wenn Sie hierher gekommen sind, weil Sie das Neue verwenden ASP.NET
Identity
UserManager
, suchen Sie tatsächlich Folgendes RoleManager
:
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
roleManager
Sie erhalten Zugriff darauf, ob die Rolle vorhanden ist, erstellt usw. wird und für die Rolle erstellt wurde UserManager
Ich habe an anderer Stelle über Google zwei Vorschläge gefunden, die vorschlugen: a) sicherzustellen, dass Ihre Datenbank-Verbindungszeichenfolge (die von Roles verwendete) korrekt ist und dass der Schlüssel dazu richtig geschrieben ist, und b) dass das Flag "Aktiviert" in RoleManager auf "true" gesetzt ist. Hoffe einer davon hilft. Es hat für mich getan.
Haben Sie versucht, Roles.Enabled zu überprüfen? Sie können auch Roles.Providers überprüfen, um festzustellen, wie viele Anbieter verfügbar sind, und Sie können den Roles.Provider für den Standardanbieter überprüfen. Wenn es null ist, gibt es keine.
Ich fand diese Frage aufgrund der darin erwähnten Ausnahme. Meine Web.Config hatte kein <roleManager>
Tag. Ich erkannte, dass selbst wenn ich es hinzufügte (wie Infotekka vorschlug ), es in einer Datenbankausnahme endete. Nachdem Sie den Vorschlägen in den anderen Antworten hier gefolgt sind, hat keiner das Problem vollständig gelöst.
Da diese Web.Config-Tags automatisch generiert werden können, war es falsch, sie durch manuelles Hinzufügen zu lösen. Wenn Sie sich in einem ähnlichen Fall befinden, machen Sie alle Änderungen rückgängig, die Sie an Web.Config und in Visual Studio vorgenommen haben:
Überprüfen Sie Ihre Web.config und jetzt sollten Sie mindestens ein <providers>
Tag in den Tags Profil , Mitgliedschaft , SessionState und auch im neuen RoleManager- Tag haben, wie folgt :
<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>
Fügen Sie enabled="true"
wie folgt hinzu:
<roleManager defaultProvider="DefaultRoleProvider" enabled="true">
Drücken Sie F6auf Erstellen, und jetzt sollte es in Ordnung sein, mit einer Datenbankaktualisierung fortzufahren, ohne diese Ausnahme zu haben:
update-database -verbose
und die Seed-Methode funktionieren einwandfrei (wenn Sie nicht an anderer Stelle herumgespielt haben) und erstellen einige Tabellen in Ihrer Datenbank.Wenn Sie verwenden ASP.NET Identity UserManager
, können Sie es auch so bekommen:
var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roles = userManager.GetRoles(User.Identity.GetUserId());
Wenn Sie beispielsweise den Schlüssel für den Benutzer von Guid in Int geändert haben, verwenden Sie diesen 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>
Hier ist der Code, den Sie in MVC5 und höher in Ihren Account Controller eingeben müssen, um die Liste der Rollen eines Benutzers abzurufen:
csharp
public async Task<ActionResult> RoleAdd(string UserID)
{
return View(await
UserManager.GetRolesAsync(UserID)).OrderBy(s => s).ToList());
}
Die Rollenmanagerfunktion muss nicht verwendet Roles.GetRolesForUser()
und aktiviert werden.
web.config
? Ich habe versucht, es einzulegenApplication_Start
und es heißtThis method can only be called during the application's pre-start initialization phase.