Не могу поймать HttpRequestException - PullRequest
0 голосов
/ 04 июля 2018

У меня следующий код

public async Task<T> SendData<T>()
{
    T result = default(T);

    using (var client = new HttpClient())
    {
        using (var formData = new MultipartFormDataContent())
        {
            try
            {
                foreach (var p in ParametresToSend)
                    formData.Add(p.Value, p.Key);

                HttpResponseMessage response = await client.PostAsync(URL, formData);

                string stringContent = await response.Content.ReadAsStringAsync();
                result = JsonConvert.DeserializeObject<T>(stringContent);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                ParametresToSend.Clear();
            }
        }
    }

    return result;
}

Это работает отлично, но если интернет не доступен после проверки его доступности (очень короткое время, но это возможно), он ловит first HttpRequestException. И после этого сразу же будет выброшено second HttpRequestException, но блок catch не перехватит его и приложение получит сбой. Почему это радует?

Ответы [ 2 ]

0 голосов
/ 04 июля 2018
      try
        {
            HttpResponseMessage response = await client.PostAsync(URL, formData);
            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                string stringContent = await response.Content.ReadAsStringAsync();
                result = JsonConvert.DeserializeObject<T>(stringContent);
            }
        }
        catch (HttpRequestException)
        {

            throw;
        }

попробуйте это

0 голосов
/ 04 июля 2018

Вы перебрасываете исключение, когда вы его ловите, это так же хорошо, как и не поймать его в первую очередь.

Ваше приложение аварийно завершает работу, потому что нет ничего, что могло бы обработать это повторно выброшенное исключение - у вас нет глобальной обработки исключений, что было бы очень хорошей идеей, если само это приложение ASP.NET. .

...