c# - 使用 Entity Framework Core 在主键违规视图上显示自定义错误
问题描述
我希望显示自定义错误消息,就像 required、regex 等一样,但主键违规。
检查是为了永远不能插入主键。我还放什么?
我不想使用 Ajax 或ViewBag/ViewState
,否则我知道该怎么做。我想在表单帖子上显示该错误“此代码已存在”。
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Code,Libelle")] Marque marque)
{
if (ModelState.IsValid)
{
var codeExists = _context.Marque.Where(s => s.Code == marque.Code)
.FirstOrDefault()
.Code == marque.Code ? "yes" : "no";
if (codeExists == "no")
{
_context.Add(marque);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
else
{
}
}
return View(marque);
}
解决方案
我假设你有一个 web 应用程序而不是 web api - 因为这没有在你的代码中指定。
在 Asp.net core 中,可以配置错误处理中间件:
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
然后你可以有如下所示的错误控制器,它根据异常类型返回视图。
[AllowAnonymous]
public IActionResult Error()
{
var exceptionHandlerPathFeature =
HttpContext.Features.Get<IExceptionHandlerPathFeature>();
if (exceptionHandlerPathFeature?.Error is FileNotFoundException)
{
ExceptionMessage = "File error thrown";
}
if (exceptionHandlerPathFeature?.Path == "/index")
{
ExceptionMessage += " from home page";
}
// Either show exception message on page or return different views based on conditions.
}
希望这可以帮助!
提示- 即使您有 Web API,您也可以选择将业务错误代码从 API 返回到 UI,然后 UI 可以根据这些代码显示适当的错误消息。
参考:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-3.0
推荐阅读
- c++ - VS 代码无法编译多个 C++ 文件(WSL)
- javascript - oninput 函数在 window.onload 后未触发
- python - 打印显示日文字符,但保存到 csv 时不显示
- git - 将本地文件系统中的项目推送到 Github
- r - 将 Int Dates 转换为 Date 变量 lubridate
- javascript - 如何将多个setClassToggle设置为同一个触发器ScrollMagic
- python - 为什么我在这个 python 代码中得到一个 TypeError?
- javascript - 如何在javascript中删除开头的0?
- facebook-opengraph - Google Keep 如何获取链接预览?
- datepicker - DatePicker 忽略不在 closedRange 中的值