优化 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>
}
效果: