如何在asp.net核心中删除用户? [重复]

问题描述 投票:-2回答:1

这个问题在这里已有答案:

我在视图中创建了一个删除操作方法和一个操作按钮,但我不断收到错误。有人可以看看代码并告诉我有什么问题吗?

  public async Task<IActionResult> DeleteUserd(string Id)
    {

       //get User Data from Userid
        var user = await _usermanager.FindByIdAsync(Id);

        //List Logins associated with user
        var logins = user;

        //Gets list of Roles associated with current user
        var rolesForUser = await _usermanager.GetRolesAsync(user);

        using (var transaction = _application.Database.BeginTransaction())
        {

            if (rolesForUser.Count() > 0)
            {
                foreach (var item in rolesForUser.ToList())
                {
                    // item should be the name of the role
                    var result = await _usermanager.RemoveFromRoleAsync(user, item);
                }
            }

            //Delete User
            await _usermanager.DeleteAsync(user);

            TempData["Message"] = "User Deleted Successfully. ";
            TempData["MessageValue"] = "1";
            //transaction.commit();
        }

        return RedirectToAction("UsersWithRoles", "ManageUsers"); 
    }

这是视图按钮:

 <a asp-action="DeleteUserd">Delete</a>
c# asp.net-core asp.net-identity-3
1个回答
2
投票

您的链接未传递要删除的ID。因此,action param为null,当你将它传递给FindByIdAsync时,你会得到一个异常,因为param不能为null。

简单地说,您只需要将链接更改为:

<a asp-action"DeleteUserId" asp-route-id="@user.Id">Delete</a>

其中@user将是删除链接所针对的特定用户。

但是,您的方法存在许多问题。删除等原子操作不应该通过GET请求发生,而GET请求始终是基本链接。相反,你使用表单/ AJAX并通过POST或最好DELETE提交,如果可以的话。

您还需要确保当前用户有权实际删除用户,或者您正在为自己打开一场大规模灾难。最后,您应确保当前登录的用户无法自行删除,这显然会有问题。

© www.soinside.com 2019 - 2024. All rights reserved.