首页 > 解决方案 > 使用 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);
}

标签: c#asp.netasp.net-core

解决方案


我假设你有一个 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


推荐阅读