Проблемы с перехватом исключения из клиента http flurl

У меня есть api отдыха с .net5, который имеет глобальный фильтр исключений и возвращает объект ErrorMessage в случае исключений. Я вызываю api из приложения WinForms .net framework 4.8 и плохие запросы с сервера, со стороны клиента я получаю исключение System.AggregateException, и согласно документации flurl это должно быть FlurlHttpException. Я пытался звонить с помощью HttpClient, и все работает, как ожидалось, но мне легче использовать flurl, поэтому я хочу найти решение проблемы, если кто-то знает, как это сделать, и хочет поделиться им, будет большой

        try
        {
            var result = (serverUrl)
                         .AppendPathSegment(endPoit)
                         .PostJsonAsync(new { Email = email, Password = password }).Result;
            if (result.ResponseMessage.IsSuccessStatusCode)
            {
                var aut = result.GetJsonAsync<Autorizacion>().Result;
            }
        }
        catch (FlurlHttpException ex)
        {
            var error = ex.GetResponseJsonAsync<ErrorMessage>();
        }

person Fabian Wesling    schedule 21.11.2020    source источник


Ответы (1)


Во-первых, вместо этого лучше использовать async await. блокировки Result звонка. Но если вам нужно использовать блокирующие вызовы, используйте GetAwaiter (). GetResult (), чтобы получить развернутое исключение.

person Alexander    schedule 22.11.2020
comment
Спасибо за ответ, ваш ответ решил мою проблему. Я новичок в мире асинхронных вызовов, и в этом случае я не могу использовать async await, но могу использовать GetAwaiter (). GetResult () отлично работает. Оказалось, что это моя концептуальная ошибка, я никогда не смогу получить исключение flurl, если дождусь результата от task.resul. огромное объятие и еще раз спасибо - person Fabian Wesling; 22.11.2020
comment
в этом случае я не могу использовать async await Почему бы и нет? Flurl - это асинхронная библиотека. Использование его таким образом, как вы, является приглашением к тупикам, и я рекомендую либо перейти на модель асинхронного программирования, либо использовать библиотеку, которая явно поддерживает блокировку HTTP-вызовов. - person Todd Menier; 23.11.2020
comment
В нем говорилось, что я не могу использовать async и await, потому что мне пришлось внести несколько изменений, но в итоге я это сделал, и теперь я использую все асинхронные ... большие объятия - person Fabian Wesling; 25.11.2020