userManager.AddToRoleAsync() - Fehler: Rolle nicht vorhanden

Ich bin erstellen einer Benutzer-Registrierung-system verwenden .NET Core, Identität, Kern, und der MVC-Kern. Ich bin in der Lage, erstellen Sie Benutzer und Rollen erstellen, in der Datenbank.

Hier ist das Formular auf der Ansicht, dass lässt mich wählen Sie einen Benutzer, und wählen Sie eine Rolle hinzufügen:

@using (Html.BeginForm("AddRoleToUser", "Roles"))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <p>
        Username : @Html.DropDownList("UserName", (IEnumerable<SelectListItem>)ViewBag.Users, "Select ...")
        Role Name: @Html.DropDownList("RoleName", (IEnumerable<SelectListItem>)ViewBag.Roles, "Select ...")

    </p>

    <input type="submit" value="Save" />
}

Diese drop-down-Listen sind gefüllt mit Benutzer und Rollen, die bereits in der Datenbank vorhanden. Sie ermöglicht es mir, wählen Sie Users , und die Namen eine Rolle, die ich bereits erstellt. Ich habe zum Beispiel eine Rolle mit dem Namen "admin", mit diesem Formular können Sie mir wählen Sie die Zeichenfolge "admin".

Hier ist die Aktion, die Griffe hinzufügen einer Rolle zu einem Benutzer:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> AddRoleToUser(string UserName, string RoleName)
    {
        try
        {
            ApplicationUser user = _db.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
            await _userManager.AddToRoleAsync(user, RoleName);
            PrepopulateDropDownMenus();
            ViewBag.ResultMessage = "Role created successfully!";
            return View("Manage", "Roles");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return View("Manage");
        }
    }

Die Aktion nicht hinzufügen der Rolle für den Benutzer und die Ausnahme heißt "Rolle "ADMIN" existiert nicht." ohne innere Ausnahme. Ich habe versucht, drehen den RoleName im action-Parameter, um alle Kappen, aber noch nicht die Rolle. Ich habe auch versucht, mit der Rolle, die ID statt des namens, das war auch erfolglos.

Genau diesem code funktioniert, wenn ich baute dieses app mithilfe von Identity 3.0 mit MVC-6. Wie es scheint, hat sich etwas verändert in Bewegung über, um die Identität Core.

Irgendwelche Gedanken?

Bearbeiten

Hier ist der code, den ich verwende zum füllen der Dropdown-Listen in RolesController über den Viewbag:

    private void PrepopulateDropDownMenus()
    {
        var rolesList = _db.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
        var usersList = _db.Users.OrderBy(u => u.UserName).ToList().Select(uu => new SelectListItem { Value = uu.UserName.ToString(), Text = uu.UserName }).ToList();
        ViewBag.Roles = rolesList;
        ViewBag.Users = usersList;
    }

Hier ist, wie ich hinzufügen Identität in Start.cs in der ConfigureServices Methode:

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddEntityFramework()
            .AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));
        services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultTokenProviders();
    }

Hier ist die route in RolesController.cs ich verwenden, um erstellen Sie eine neue Rolle in der Datenbank:

    [HttpPost]
    public IActionResult Create(string rolename)
    {
            _db.Roles.Add(new IdentityRole()
            {
                Name = rolename
            });
            _db.SaveChanges();
            ViewBag.ResultMessage = "Role created successfully!";
            return RedirectToAction("Index");
    }
InformationsquelleAutor jmk22 | 2016-09-15
Schreibe einen Kommentar