优化 DeleteRole 方法,更新数据库出错时通过 ViewBag 传递错误信息:
[HttpPost]public async Task<IActionResult> DeleteRole(string id){var role = await _roleManager.FindByIdAsync(id);if (role == null){ViewBag.ErrorMessage = $"角色 Id {id} 的信息不存在,请重试。";return View("NotFound");}try{var result = await _roleManager.DeleteAsync(role);if (result.Succeeded){return RedirectToAction("ListRoles");}foreach (var error in result.Errors){ModelState.AddModelError("", error.Description);}return View("ListRoles");}catch (DbUpdateException ex){_logger.LogError($"发生异常 {ex}");ViewBag.ErrorTitle = $"角色 {role.Name} 正在被使用中";ViewBag.ErrorMessage = $"无法删除 {role.Name} 角色,因为此角色中已存在用户。需先删除该角色中的用户,再尝试删除角色本身。";return View("Error");}}
优化 Error 视图以显式自定义错误:
@{ViewBag.Title = "异常错误页面";}@if (string.IsNullOrEmpty(ViewBag.ErrorTitle)){<h3>程序请求时,发生了一个内部错误,我们会反馈给开发团队,尽快解决该问题</h3><h5>请通过 ltm@xxx.org 与我们取得联系</h5>}else{<h1 class="text-danger">@ViewBag.ErrorTitle</h1><h5 class="text-danger">@ViewBag.ErrorMessage</h5>}
效果:
