Подтвердить что ты не робот

Правильное управление двумя WebException

Я пытаюсь обрабатывать два разных WebException правильно.

В основном они обрабатываются после вызова WebClient.DownloadFile(string address, string fileName)

AFAIK, до сих пор есть два, с которыми мне приходится обращаться: WebException:

  • Удаленное имя не может быть разрешено (т.е. нет подключения к сети для доступа к серверу для загрузки файла)
  • (404) Файл отсутствует (т.е. файл не существует на сервере)

Там может быть больше, но это то, что я нашел наиболее важным до сих пор.

Итак, как я должен обрабатывать это правильно, так как они оба WebException, но я хочу обрабатывать каждый случай выше по-разному.

Это то, что у меня есть до сих пор:

try
{
    using (var client = new WebClient())
    {
        client.DownloadFile("...");
    }
}
catch(InvalidOperationException ioEx)
{
    if (ioEx is WebException)
    {
        if (ioEx.Message.Contains("404")
        {
            //handle 404
        }
        if (ioEx.Message.Contains("remote name could not")
        {
            //handle file doesn't exist
        }
    }
}

Как вы можете видеть, я проверяю сообщение, чтобы узнать, какой тип WebException он есть. Я бы предположил, что есть лучший или более точный способ сделать это?

Спасибо

4b9b3361

Ответ 1

На основе этой статьи MSDN вы можете сделать что-то в следующих строках:

try
{
    // try to download file here
}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
        if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
        {
            // handle the 404 here
        }
    }
    else if (ex.Status == WebExceptionStatus.NameResolutionFailure)
    {
        // handle name resolution failure
    }
}

Я не уверен, что WebExceptionStatus.NameResolutionFailure - это ошибка, которую вы видите, но вы можете проверить генерируемое исключение и определить, что такое WebExceptionStatus для этой ошибки.