2017-10-12 55 views
-2

與VS 2015我創建了一個有默認驗證的東西的小MVC應用程序。 我改變什麼,但代碼在賬戶控制器的登記行爲:ASP.Net UserManager AddRoleTo不工作

var context = new ApplicationDbContext(); 
if (ModelState.IsValid) 
{ 
    var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
    var result = await UserManager.CreateAsync(user, model.Password); 

    var roleStore = new RoleStore<IdentityRole>(context); 
    var roleManager = new RoleManager<IdentityRole>(roleStore); 

    var userStore = new UserStore<ApplicationUser>(context); 
    var userManager = new UserManager<ApplicationUser>(userStore); 

    if (!roleManager.RoleExists("Administrator")) 
    { 
     roleManager.Create(new IdentityRole("Administrator")); 
    } 
    if (!roleManager.RoleExists("User")) 
    { 
     roleManager.Create(new IdentityRole("User")); 
    } 

    if (context.Users.Count() == 1) 
    { 
     userManager.AddToRole(user.Id, "Administrator"); 
    } else 
    { 
     try 
     { 
      userManager.AddToRole(user.Id, "User"); 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Error assigning role: " + ex.Message); 
     } 
    } 

第位訪問者成爲「管理員」。雖然「userManager.AddToRole(user.Id,」User「);」不會拋出異常沒有以下注冊用戶分配給該角色(檢查表,並根據授權(角色...)。 我不知道這裏有什麼問題。

回答

0

我已經想通了我在用戶名中使用了帶「+」的通用電子郵件地址,例如[email protected]。當嘗試/捕獲AddRoleTo方法時,這不會在註冊時造成麻煩,並且不會引發異常,而是在AddRoleTo的結果堆棧出現一個錯誤,只允許字符和數字用於用戶名。