如何在mvc5中使用UserManager删除用户

时间:2014-03-13 12:54:20

标签: asp.net-mvc-5 asp.net-identity

我正在使用mvc5,以及关于用户帐户管理的一切我使用UserManager。它适用于角色,声明等。但我没有找到如何使用UserManager删除用户。有没有办法用UserManager删除用户?我可以使用dbset创建数据库上下文,然后从此上下文中删除它,但我不想为一个删除方法创建dbcontext,userclass等。

3 个答案:

答案 0 :(得分:3)

我遇到了上述答案的问题,但我能够弄清楚出了什么问题。我不断得到级联错误。基本上,用户被删除而没有删除角色。 DeleteAsync并没有为我做这件事(我有最新版本的Identity Framework)。结束将用户标识和角色传递到我的代码中,从角色中删除用户,然后删除用户。似乎工作正常。

[HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Delete(string id, string role)
    {
        // Check for for both ID and Role and exit if not found
        if (id == null || role == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        // Look for user in the UserStore
        var user = UserManager.Users.SingleOrDefault(u => u.Id == id);

        // If not found, exit
        if (user == null)
        {
            return HttpNotFound();
        }

        // Remove user from role first!
        var remFromRole = await UserManager.RemoveFromRoleAsync(id, role);

        // If successful
        if (remFromRole.Succeeded)
        {
            // Remove user from UserStore
            var results = await UserManager.DeleteAsync(user);

            // If successful
            if (results.Succeeded)
            {
                // Redirect to Users page
                return RedirectToAction("Index", "Users", new {area = "Dashboard"});
            }
            else
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
        }
        else
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

    }

答案 1 :(得分:0)

1.0中的UserManager不支持删除,但在即将发布的2.0版本中支持删除,如果您想提前预览更改,则在当前的2.0夜间版本中支持。

答案 2 :(得分:0)

使用更新的asp.net身份我有以下代码:

public UserManagerController()
        : this(new UserManager<User>(new UserStore<User>(new ApplicationDbContext())))
    {
    }

    public UserManagerController(UserManager<User> userManager)
    {
        UserManager = userManager;
    }

    public UserManager<User> UserManager { get; private set; }

    public async Task<ActionResult> Delete (string id)
    {
        var userContext = new ApplicationDbContext();


        var user = UserManager.Users.SingleOrDefault(u => u.Id == id);

        var userStore = new UserStore<User>(userContext);

        await UserManager.DeleteAsync(user);

        // var userManager = new UserManager<User>(userStore);

        // await userManager.DeleteAsync(user);

        return RedirectToAction("Index");
    }

这个现在删除用户。它也不需要从UserRoles表中删除,因为UserManager.DeleteAsync(user)负责处理。

希望这会有所帮助。我花了一些时间搞清楚为什么会出现一些错误。

特朗德