C# 在MVC Web应用程序中删除ASP.NET标识时出现问题
因此,在查阅了有关如何删除ASP用户的指南和教程后,我发现以下代码非常简洁:C# 在MVC Web应用程序中删除ASP.NET标识时出现问题,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,因此,在查阅了有关如何删除ASP用户的指南和教程后,我发现以下代码非常简洁: [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> DeleteConfirmed(string id) { if (ModelState.IsValid) { if (id == null) {
[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();
}
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务
@ActionLink(“编辑”,“编辑”,新的{id=user.UserId})|
@ActionLink(“删除”,“删除确认”,新的{id=user.UserId})
理论上,单击此处的“Delete”后,它应该从名为“ManageUsersController”的控制器调用DeleteConfirmation方法。但是,它返回以下错误:
“/”应用程序中出现服务器错误
找不到资源
描述:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确
请求的URL:/ManageUsers/DeleteConfirmed/29ad177f-0285-43d2-b065-109876f270b9
这里可能出了什么问题?是否有其他方法可以在控制器中编写该方法?提前感谢此答案基于.NET scaffold为我们提供的默认代码
- 您正在使用
ActionLink
的扩展名生成Delete
链接,该扩展名需要链接文本作为第一个参数,操作名称作为第二个参数。您的deleteConfixed
操作是一种POST
方法;无法生成到POST的链接,.NET查看链接的获取方法。因此:
- 如果在单击“删除”按钮时需要删除用户,则应使用POST表单,其中包括用户id和防伪令牌作为隐藏输入,并使用提交按钮而不是链接。但最好的做法是向用户展示他们正在删除的内容。这就是为什么.NET生成了两个相关的删除操作<代码>删除(查看)和删除确认(实际删除)
非常感谢您的帮助!我创建了一个名为Delete
的新GET方法,如下所示:[HttpGet]public ActionResult Delete(){return RedirectToAction(“Index”);}
但是现在错误是:请求的URL:/ManageUsers
-删除GET方法的内容应该是什么?@Questieme不客气。我想那将是一次很长的谈话。因此,我建议您全面了解ASP MVC的工作原理。如果您有另一个由.NETscaffolding系统生成的控制器,一定要看看。请检查ASP.NET文档。@Questieme但目前为1。您不需要[HttpGet]
;这是默认值。2.对于Delete
,您需要一个id
参数。3.您需要从上下文(DB等)中通过该id
获取用户。4.在删除之前,您需要将该用户
传递到视图文件以向用户显示它。5.查看文件必须具有上述POST表单,因此在提交时将触发deleteConfixed
。
<td>
@Html.ActionLink("Edit", "Edit", new { id = user.UserId }) |
@Html.ActionLink("Delete", "DeleteConfirmed", new { id = user.UserId })
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = user.UserId }) |
@Html.ActionLink("Delete", "Delete", new { id = user.UserId })
</td>