当你的控制器中的一个操作调用了自己代码引发了异常,应该如何处理?我看到很多最佳实践的例子中根本没有try-catch语句。例如从存储库访问数据:
public ViewResult Index()
{
IList<CustomModel> customModels = _customModelRepository.GetAll();
return View(customModels);
}
如果我们使用像 Entity Framework 这样的 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 的类中,该类处理错误并返回消息以供显示给用户。
我在思考如何最好地处理这个问题?我并不总是想返回到错误页面,因为一些异常不应该这样做。相反,应该使用普通视图显示向用户显示错误消息。我的以前的方法正确吗,还是有更好的解决方案?