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



我使用mvc5,所有关于用户帐户管理的事情我都使用UserManager。它可以很好地处理角色、声明等。但是我没有找到如何用UserManager删除用户。是否有办法删除用户与UserManager?我可以用dbset创建数据库上下文,然后从这个上下文中删除它,但我不想为一个删除方法创建dbcontext, userclass等。

我对上面的答案有问题,尽管我能够找出问题所在。我一直得到一个级联错误。基本上用户被删除了,而角色没有被删除。DeleteAsync并没有为我这样做(我有身份框架的最新版本)。最后将userid和角色都传递到我的代码中,从角色中删除用户,然后删除用户。似乎可以正常工作。

[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);
        }
    }

Delete在1.0版本的UserManager中不支持,但在即将发布的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)处理的。

希望这对一些人有帮助。我花了一些时间来弄清楚为什么我得到了一些错误。

Trond

相关内容

  • 没有找到相关文章

最新更新