Вопрос

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

Спасибо

Это было полезно?

Решение

На основе Эта статья 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 Для этой ошибки есть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top