Правильно обрабатывать два WebException

Я пытаюсь справиться с двумя разными WebExceptionвсе правильно.

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

AFAIK, пока есть два, я должен справиться, оба WebException"S:

  • Удаленное имя не может быть разрешено (т. Е. Нет подключения к сети для доступа к серверу для загрузки файла)
  • (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. Я бы предположил, что есть лучший или более точный способ сделать это?

Спасибо

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 за эту ошибку есть.

Другие вопросы по тегам