gpt4 book ai didi

asp.net-mvc - 是否有任何建议将错误消息从数据访问层显示到 View ?

转载 作者:行者123 更新时间:2023-12-02 01:18:01 25 4
gpt4 key购买 nike

我想知道从数据访问层(或其他层)向 View 显示错误消息的最佳实践或最佳/优雅方式是什么。

我正在使用 ASP.NET MVC 5,我的项目有多个层,例如:

  • MyApp.Web
  • MyApp.Business
  • MyApp.Repository
  • MyApp.DAL

我想向 IHM 提出两种类型的“错误消息”:

  • 异常生成的错误:记录异常并显示人性化的错误消息。

  • 业务错误:例如,某项操作需要客户至少有 3 张发票,而他只有 2 张。

在另一个项目中,这是我所做的:

Controller

[HttpPost]
public ActionResult Edit()
{
//...
ErrorModel errorModel = new ErrorModel();

BusinessLayer businessLayer = new businessLayer()
businessLayer.Edit( /* some parameters */, out errorModel)

TempData[Error] = errorModel
}

查看

@{
var errorModel = TempData[Error]
}

/* if error model is not null, display the error correctly */

在每一层,我所有的方法都有一个out ErrorModel变量,填充在try/catch block 中,或者因为业务失败,我绝对不喜欢那个。

我在Google上找到了很多答案或 Stack Overflow,但都集中在如何捕获错误上。

*我的问题更进一步:一旦被捕获,如何以一种优雅的方式将错误从它发生的层带到 View 中?

最佳答案

一般方法是在所有层中抛出异常并在顶层处理它们(表示 - Controller 操作)。异常是一种方法结果,不需要在方法签名中指定。传递 errorModel 的方法并不好,因为每个方法都应该返回它并且每个方法都应该有 try catch block 。

在业务层中,您可以有一些业务异常,它们派生自 Exception 类并具有一些附加信息。或者您可以使用通用的 ApplicationException 类。
所以,你的 Controller 可以看起来像

    [HttpPost]
public ActionResult Edit()
{
try
{
businessLayer.Edit( /* some parameters */)
return Ok();
}
catch(BadAcctionException)
{
TempData[Error] = "Bad business operation";
return BadBusinessAction();
}
catch(ApplicationException ex)
{
TempData[Error] = ex.Message;
return Fail();
}
}

在 businessLayer.Edit 内部,如果出现错误,您将抛出异常。

关于asp.net-mvc - 是否有任何建议将错误消息从数据访问层显示到 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41680510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com