首页 > 解决方案 > 如果存储库层发生异常,则从 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 状态代码返回错误消息的正确方法是什么?

标签: c#asp.net-mvc

解决方案


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


推荐阅读