Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Где обрабатывать исключения в приложении asp.net mvc?

#c_sharp #aspnet #aspnet_mvc #исключения #aspnet_core


Где необходимо отлавливать исключения в приложении asp.net mvc? Например у меня есть
функция в сервисе, которая использует базу данных:

public async Task GetAcount(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



Исключения надо обрабатывать там, где их может обработать прикладная логика. Обрабатывать в репозитории - не рекомендуется, никакой код не сможет узнать, почему он не получил сущность. Обрабатывать в сервисе - уже вполне можно, возможно сервис должен создавать новую сущность, если не найдена нужная - это уже ваша логика и вам решать, как себя вести. В контроллере обработка тоже вполне допустима. Только вам самому надо решить, что это исключение значит и как на него реагировать. Контроллер - это уже выход на пользователя. Т.е. лучше предоставить пользователю информацию - что случилось, кто виноват и что с этим можно сделать. Просто "Ошибка" обычно абсолютно бесполезна.

Комментариев нет:

Отправить комментарий