从存储库层发生异常的情况下,从catch块返回的语句?

时间:2019-07-08 14:41:40

标签: c# asp.net-mvc

我有点困惑,只要存储库层抛出异常,我应该发回什么响应。

我有一个控制器,该控制器调用服务,然后服务调用存储库以返回数据。

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状态代码返回错误消息的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

最好的方法是记录您在存储库中遇到的错误,然后从Web API尝试管理状态代码,以便客户端也可以处理前端中的错误。