c# - 在 MVC Web 应用程序中删除 ASP.NET 标识的问题
问题描述
因此,在四处寻找有关如何删除 ASP 用户的指南和教程后,我发现以下代码非常简洁:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(string id)
{
if (ModelState.IsValid)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await UserManager.FindByIdAsync(id);
var logins = user.Logins;
var rolesForUser = await UserManager.GetRolesAsync(id);
using (var transaction = context.Database.BeginTransaction())
{
foreach (var login in logins.ToList())
{
await UserManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
}
if (rolesForUser.Count() > 0)
{
foreach (var item in rolesForUser.ToList())
{
// item should be the name of the role
var result = await UserManager.RemoveFromRoleAsync(user.Id, item);
}
}
await UserManager.DeleteAsync(user);
transaction.Commit();
}
return RedirectToAction("Index");
}
else
{
return View();
}
}
<td>
@Html.ActionLink("Edit", "Edit", new { id = user.UserId }) |
@Html.ActionLink("Delete", "DeleteConfirmed", new { id = user.UserId })
</td>
在这里点击“删除”后,理论上应该是从名为“ManageUsersController”的控制器中调用了DeleteConfirmed方法。但是,它返回此错误:
“/”应用程序中的服务器错误。
无法找到该资源。
说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。
请求的 URL:/ManageUsers/DeleteConfirmed/29ad177f-0285-43d2-b065-109876f270b9
这里可能出了什么问题?还有另一种方法可以在控制器中编写方法吗?先感谢您
解决方案
这个答案基于 .NET 为我们搭建的默认代码。
- 您正在
Delete
使用扩展生成链接,该扩展ActionLink
需要链接文本作为第一个参数,动作名称作为第二个参数。你的DeleteConfirmed
行动是一种POST
方法;您无法生成指向 POST 的链接,.NET 会看到 GET 链接方法。所以:
<td>
@Html.ActionLink("Edit", "Edit", new { id = user.UserId }) |
@Html.ActionLink("Delete", "Delete", new { id = user.UserId })
</td>
确保您的控制器中
Delete
有另一种方法称为方法。GET
将另一个属性添加到
DeleteConfirmed
:
[ActionName("Delete")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(string id)
{ ... }
- 如果您需要在单击 时删除用户
Delete
,则应使用包含用户 ID 和防伪令牌作为隐藏输入的 POST 表单,并使用提交按钮而不是链接。但最好的做法是向用户展示他们正在删除的内容。这就是 .NET 生成两个相关的删除操作的原因;Delete
(审查)和DeleteConfirmed
(实际删除)。
推荐阅读
- windows - 如何从启动中删除 Docker.Service
- java - 使用 add 方法将重复的对象存储在 ArrayList 中
- python - 在嵌套的python dict中查找所有出现的键
- python - 如何在不同的功能中改变 QPushButton 的颜色?
- java - 使用 Maven 从 Jersey 项目创建 Uber Jar
- angular - 如何使用 rxjs 等待 forEach 并返回一个值?
- javascript - 当相邻元素存在时,d3 svg 缩放不起作用
- javascript - 如何使用 Vue-SweetAlert2 在单个弹出窗口中传递多个用户输入并更新数据
- sql - SQL Server 结果集中多个日期列的排序
- android - 如何使用改造使导航抽屉动态化?