asp.net-mvc – ASP.NET MVC 5如何在Identity 2.0中删除用户及其
嗨,我正在关注本文删除Identity 2.0中的用户
http://www.asp.net/mvc/tutorials/mvc-5/introduction/examining-the-details-and-delete-methods 但是,我需要先删除AspNetUserRoles中的所有相关记录,然后删除该用户. 我发现一个写在Identity 1.0中的例子,这个例子中使用的一些方法不存在. // POST: /Users/Delete/5 [HttpPost,ActionName("Delete")] [ValidateAntiForgeryToken] public async Task<ActionResult> DeleteConfirmed(string id) { if (ModelState.IsValid) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } var user = await context.Users.FindAsync(id); var logins = user.Logins; foreach (var login in logins) { context.UserLogins.Remove(login); } var rolesForUser = await IdentityManager.Roles.GetRolesForUserAsync(id,CancellationToken.None); if (rolesForUser.Count() > 0) { foreach (var item in rolesForUser) { var result = await IdentityManager.Roles.RemoveUserFromRoleAsync(user.Id,item.Id,CancellationToken.None); } } context.Users.Remove(user); await context.SaveChangesAsync(); return RedirectToAction("Index"); } else { return View(); } } 我从任何地方找不到“IdentityManager”,context.Users也没有FindAsync()方法. 请帮忙弄清楚如何在Identity 2.0中正确删除用户及其相关记录 谢谢. 解决方法
我认为你正在寻找的课程是
UserManager和
RoleManager.在我看来,他们是更好的方式,而不是直接反对上下文.
UserManager定义了一个方法RemoveFromRoleAsync,它允许您从给定角色中删除用户(由他的密钥识别).它还定义了几种查找方法,例如FindAsync,FindByIdAsync,FindByNameAsync或FindByEmailAsync.它们都可以用于检索用户.要删除用户,您应该使用接受用户对象作为参数的DeleteAsync方法.要获取用户是Identity的成员角色,您可以通过GetRolesAsync方法传递用户的ID.此外,我看到您正在尝试从用户中删除登录.为此,您应该使用RemoveLoginAsync方法. 所有代码中的所有代码将类似于以下代码: // POST: /Users/Delete/5 [HttpPost,ActionName("Delete")] [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(); } } 您需要根据需要调整此片段,因为我不知道IdentityUser实现如何.请记住根据需要声明UserManager.在Visual Studio中使用个人帐户创建新项目时,可以找到一个可以做到这一点的示例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – 似乎无法有条件地使用Razor的foreach和if
- 如何在aspx页面中隐藏ASP.NET自定义控件的属性?
- 在子文件夹中运行ASP.NET网站
- asp.net – 在服务器端运行VBA功能从WCF服务访问数据库
- asp.net – 检测是否加载了HttpModule
- asp.net-mvc – 在Generic Repository中定义Default构造函数
- ASP.NET Excel导出编码问题
- ASP.Net Identity 2.0中的不同用户类型
- asp-classic – IE7经典ASP缓存
- asp.net-mvc – ASP.NET MVC 3在文章视图中添加注释
- asp.net – 是否可以在多个Web服务器之间共享Sys
- asp.net – 使用ITemplate对自定义控件进行数据绑
- asp.net – ScriptManager.axd不会缓存
- asp.net-mvc – asp.net mvc 3复选框列表中的for
- asp.net – 为什么Request.QueryString只读?
- .net – 在MVC应用程序之间共享视图,逻辑等
- asp.net-mvc-3 – asp.net mvc 3抛出异常
- asp.net – “localhost”上运行网站是非常慢
- asp.net-mvc – 在活动的SignalR连接期间更改用户
- asp.net-core – 实体框架核心以编程方式应用迁移