当您自己的代码从控制器中的操作调用的代码引发异常时,应该如何处理?我看到很多最佳实践示例,其中根本没有 try-catch 语句。例如,从存储库访问数据:
public ViewResult Index()
{
IList<CustomModel> customModels = _customModelRepository.GetAll();
return View(customModels);
}
显然,如果调用的是它无法访问的数据库并且我们正在使用像实体框架这样的 ORM,则此代码可能会引发异常。
然而,我所能看到的只是异常会冒泡并向用户显示令人讨厌的错误消息。
我知道 HandleError 属性,但我知道它主要用于在发生未处理的异常时将您重定向到错误页面。
当然,这段代码可以包装在一个 try-catch 中,但不能很好地分开,特别是如果你有更多的逻辑:
public ViewResult Index()
{
if (ValidationCheck())
{
IList<CustomModel> customModels = new List<CustomModel>();
try
{
customModels = _customModelRepository.GetAll();
}
catch (SqlException ex)
{
// Handle exception
}
if (CustomModelsAreValid(customModels))
// Do something
else
// Do something else
}
return View();
}
以前,我已经提取了所有可能引发异常的代码,例如数据库调用到 DataProvider 类中,该类处理错误并返回消息以向用户显示消息。
我想知道处理这种情况的最佳方法是什么?我并不总是想返回错误页面,因为某些异常不应该这样做。相反,应该以正常视图向用户显示错误消息。我以前的方法是正确的还是有更好的解决方案?