c# - 如果存储库层发生异常,则从 catch 块返回语句?
问题描述
每当存储库层抛出异常时,我应该发回什么响应,我有点困惑。
我有一个控制器,它调用一个服务,然后服务调用一个存储库来返回数据。
public class ProductController : Controller
{
[HttpGet]
public IEnumerable<Product> GetProducts()
{
return _productService.GetAllProducts();
}
}
public class ProductService: IProductService
{
public List<Product> GetAllProducts()
{
return _productRepository.GetProducts();
}
}
public class ProductRepository: IProductRepository
{
public List<Product> GetProducts()
{
try
{
//database call to get products;
}
}
catch(Exception ex)
{
log.Error("Exception occurred while calling GetProducts", ex);
return new List<Product>();
}
}
}
如果我返回新列表,如果数据库返回空数据集,则它是相同的响应,但如果发生任何异常,我想从控制器返回不同的响应。
我在想的是从存储库层返回 null,然后在服务层我可以检查响应是否为 null,然后我可以向控制器返回带有空产品列表的错误消息。
或者
我是否应该不处理存储库层中的异常而只检查服务层中的异常,然后在发生任何异常时将消息和空产品列表返回给控制器。
然后控制器可以检查是否有任何错误消息,然后返回 500 HTTP 状态代码以及消息和空列表。
我很困惑什么是处理异常和返回错误消息的正确方法。使用 HTTP 状态代码返回错误消息的正确方法是什么?
解决方案
最好的方法是记录您在存储库中遇到的错误,然后从 Web API 尝试管理状态代码,以便客户端也可以在前端处理错误。
推荐阅读
- javascript - 下面的代码打印 0,1,2,3,4,4,3,2,1,0 仅修改函数(不是循环)以获得输出为 4,3,2,1,0,0,1,2,3 ,4
- javascript - 一旦组件被渲染 ngFor - Angular 8,防止回流/重绘
- sql - 如何优化像“%param%”这样的sqlite
- symfony - 指定每个实体管理器的迁移目录
- validation - 表单验证的最佳实践
- python - 用另一个数据帧中的数据替换数据帧中的数据
- excel - 在 VLOOKUP 中选择两个值 (value, table, col_index, [range_lookup])
- api - 如何在另一个解决方案中从 MVC 项目调试 Web API 项目
- php - 如何显示 MS。HTML 中的 Office VML 公式?
- c# - 如何杀死asp.net核心中的线程