#c_sharp #aspnet #aspnet_mvc #исключения #aspnet_core
Где необходимо отлавливать исключения в приложении asp.net mvc? Например у меня есть функция в сервисе, которая использует базу данных: public async TaskGetAcount(string id) { return await _applicationUserRepository.GetOrDefaultAsync(id); } Если будет ошибка подключения к базе данных будет исключение. Его можно обработать обойти в репозитории, например так: public async Task GetOrDefaultAsync(string key) { TEntity result = null; try { return await _entities.FirstOrDefaultAsync(e => e.Id == key); } catch { } return result; } Или в сервисе, например так: public async Task GetAcount(string id) { ApplicationUser result = null; try { result = await _applicationUserRepository.GetOrDefaultAsync(id); } catch { } return result; } Или в контроллере, например так: public async Task Details(string id) { if (id == null) { return NotFound(); } ApplicationUser applicationUser = null; try { applicationUser = await _usersService.GetAcount(id); } catch { return RedirectToAction("Error"); } if(applicationUser == null) { return NotFound(); } return View(applicationUser); } Можно вообще не отлавливать исключение, тогда при ошибке пользователь увидит это: Где и как нужно обрабатывать исключения при работе с базой данных и нужно ли вообще их обрабатывать?
Ответы
Ответ 1
Исключения надо обрабатывать там, где их может обработать прикладная логика. Обрабатывать в репозитории - не рекомендуется, никакой код не сможет узнать, почему он не получил сущность. Обрабатывать в сервисе - уже вполне можно, возможно сервис должен создавать новую сущность, если не найдена нужная - это уже ваша логика и вам решать, как себя вести. В контроллере обработка тоже вполне допустима. Только вам самому надо решить, что это исключение значит и как на него реагировать. Контроллер - это уже выход на пользователя. Т.е. лучше предоставить пользователю информацию - что случилось, кто виноват и что с этим можно сделать. Просто "Ошибка" обычно абсолютно бесполезна.
Комментариев нет:
Отправить комментарий