Как создать исключение - PullRequest
0 голосов
/ 07 мая 2019

в моем приложении MVC у меня есть простой сценарий: контроллер, который вызывает бизнес-уровень, роль которого состоит в том, чтобы просто вызывать API.Код бизнес-службы следующий:

public class ApiCaller : IApiCaller
{
    public async Task<T> GetResponse<T>(Uri url)
    {
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            try
            {
                var response = await client.GetAsync(url);
                response.EnsureSuccessStatusCode();
                string responseBody = await response.Content.ReadAsStringAsync();

                return JsonConvert.DeserializeObject<T>(responseBody);
            }
            catch
            {
                ..do something..
            }
        }
    }
}

Для концепции единой ответственности я хочу, чтобы слой просто вызывал API и перехватывал исключения, если что-то идет не так.Поскольку он не несет ответственности за решение, что возвращать (в вышеприведенном контроллере) в случае возникновения исключения, а только при его перехвате, я хочу передать исключение контроллеру.В конце концов, контроллер, увидев, что возвращенный результат дал исключение, вернет что-то, или, если служба не найдена, вернет 404 или около того ... но он будет нести ответственность за решение, что возвращать, а не за бизнес-службу.Итак, мой вопрос: какова лучшая практика, чтобы выдумать исключение из этого случая?Спасибо!

1 Ответ

2 голосов
/ 07 мая 2019

В простейших случаях вы можете просто позволить исключению всплыть и поймать его в контроллере. Если вы хотите усложнить задачу, вы можете настроить бизнес-уровень на перехват ожидаемых исключений и затем выдать собственный ожидаемый тип исключений. Затем контроллер (или фильтр обработки исключений) перехватывает эти бизнес-исключения и переводит их в код ответа HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...