Ich habe folgende Methode verwendet, um zwei Rollen und zwei Benutzer zu erstellen, wenn meine Webanwendung gestartet wird (In Application_Start() in Global.asax.cs). Die Administratorrolle wird jedoch erstellt, aber nicht die Benutzerrolle. Ähnliches passiert für den Benutzer [email protected] und den Benutzer namens [email protected] Der erste wird erstellt, aber nicht der zweite.Wie erstellt man Rolle und Benutzer in der ASP.Net-Identität?
Hier ist mein Code.
void create() {
ApplicationDbContext context = new ApplicationDbContext();
IdentityResult IdRoleResult;
IdentityResult IdUserResult;
var roleStore = new RoleStore<IdentityRole>(context);
var roleMngr = new RoleManager<IdentityRole>(roleStore);
if (!roleMngr.RoleExists("Administrator"))
IdRoleResult = roleMngr.Create(new IdentityRole("Administrator"));
roleStore = new RoleStore<IdentityRole>(context);
roleMngr = new RoleManager<IdentityRole>(roleStore);
if (!roleMngr.RoleExists("User"))
IdRoleResult = roleMngr.Create(new IdentityRole("User"));
var userMngr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
var appUser = new ApplicationUser() { UserName = "[email protected]" };
IdUserResult = userMngr.Create(appUser, "pa$$word");
if (IdUserResult.Succeeded)
IdRoleResult = userMngr.AddToRole(appUser.Id, "Administrator");
userMngr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
appUser = new ApplicationUser() { UserName = "[email protected]" };
IdUserResult = userMngr.Create(appUser, "user");
if (IdUserResult.Succeeded)
IdRoleResult = userMngr.AddToRole(appUser.Id, "User");
}
Kann mir jemand sagen, was ich falsch gemacht habe oder eine alternative Möglichkeit, dies durchzuführen. Vielen Dank im Voraus.
Aktualisiert Code:
void createAdmin() {
ApplicationDbContext context = new ApplicationDbContext();
IdentityResult IdRoleResult;
IdentityResult IdUserResult;
var roleStore = new RoleStore<IdentityRole>(context);
var roleMngr = new RoleManager<IdentityRole>(roleStore);
if (!roleMngr.RoleExists("Administrator")) {
IdRoleResult = roleMngr.Create(new IdentityRole("Administrator"));
if (!IdRoleResult.Succeeded)
throw new Exception("Administrator role wasnt created.");
}
if (!roleMngr.RoleExists("User")) {
IdRoleResult = roleMngr.Create(new IdentityRole("User"));
if (!IdRoleResult.Succeeded)
throw new Exception("User role wasnt created.");
}
var userMngr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
ApplicationUser appUser;
var q = from user in userMngr.Users
where user.UserName == "[email protected]"
select user;
if (q.Count() == 0) {
appUser = new ApplicationUser() { UserName = "[email protected]" };
IdUserResult = userMngr.Create(appUser, "pa$$word");
if (IdUserResult.Succeeded) {
IdRoleResult = userMngr.AddToRole(appUser.Id, "Administrator");
if (!IdRoleResult.Succeeded)
throw new Exception("Admin user wasn't added to Administrator role.");
} else
throw new Exception("Admin user wasn't created.");
}
q = from user in userMngr.Users
where user.UserName == "[email protected]"
select user;
if (q.Count() == 0) {
appUser = new ApplicationUser() { UserName = "[email protected]" };
IdUserResult = userMngr.Create(appUser, "user");
if (IdUserResult.Succeeded) {
IdRoleResult = userMngr.AddToRole(appUser.Id, "User");
if (!IdRoleResult.Succeeded)
throw new Exception("User user wasn't added to User role.");
} else
throw new Exception("User user wasn't created.");
}
}
Hier fand ich, dass, wird der Code Ausnahme mit der Meldung zu werfen „Benutzer Benutzer wurde nicht erstellt.“
Also, was ist der Wert von 'IdRoleResult' in dem Fall, in dem die 'Benutzer'-Rolle nicht erstellt werden kann? Sie müssen sich diese Rückgabewerte ansehen, um festzustellen, was passiert. – spender
Warum erstellen Sie für jede Operation neue Instanzen des Typs "RoleStore" und "RoleManager"? Diese können wiederverwendet werden. Gleiches mit 'UserManager'. – spender
Ich würde ernsthaft vermeiden, Code wie 'if (IdUserResult.Succeeded) IdRoleResult = userMngr.AddToRole (appUser.Id," Administrator ");'. Stattdessen bevorzuge ich eine 'switch' Anweisung, wobei der Standardfall eine 'ArgumentOutOfRangeException' auslöst. Auf diese Weise versagen die Dinge niemals still. – mason