Меня немного смущает, какой ответ я должен отправлять, когда слой репозитория генерирует исключение.
У меня есть контроллер, который вызывает службу, а затем служба вызывает хранилище для возврата данных.
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>();
}
}
}
Если я возвращаю новый список, это тот же ответ, если база данных возвращает пустой набор данных, но если возникло какое-либо исключение, я хочу вернуть другой ответ от контроллера.
Что я думаю, так это вернуть ноль из уровня хранилища, а затем на уровне обслуживания я могу проверить, является ли ответ нулевым, тогда я могу вернуть сообщение об ошибке с пустым списком продуктов на контроллер.
или
я не должен обрабатывать исключения на уровне хранилища, а просто проверять наличие исключений на уровне обслуживания, а затем возвращать сообщение и пустой список продуктов обратно в контроллер, если возникло какое-либо исключение.
и затем контроллер может проверить, есть ли какое-либо сообщение об ошибке, затем вернуть 500 код состояния HTTP вместе с сообщением и пустым списком.
Я запутался, как правильно обрабатывать исключения и возвращать сообщение об ошибке. Как правильно вернуть сообщение об ошибке с кодом статуса HTTP?