Pergunta

Estou tentando lidar com dois diferentes WebExceptioné corretamente.

Basicamente, eles são tratados depois de ligar WebClient.DownloadFile(string address, string fileName)

Afaik, até agora há dois que tenho que lidar, ambos WebException'S:

  • O nome remoto não pôde ser resolvido (ou seja, nenhuma conectividade de rede ao servidor de acesso ao arquivo de download)
  • (404) Arquivo NÃO NOUND (ou seja, o arquivo não existe no servidor)

Pode haver mais, mas é isso que achei mais importante até agora.

Então, como devo lidar com isso corretamente, pois ambos são WebExceptionS, mas quero lidar com cada caso acima de maneira diferente.

É isso que tenho até agora:

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
        }
    }
}

Como você pode ver, estou verificando a mensagem para ver que tipo de WebException é. Eu diria que há uma maneira melhor ou mais precisa de fazer isso?

Obrigado

Foi útil?

Solução

Baseado em Este artigo do MSDN, você pode fazer algo nas seguintes linhas:

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
    }
}

Não tenho certeza disso WebExceptionStatus.NameResolutionFailure é o erro que você está vendo, mas você pode examinar a exceção que é lançada e determinar o que o WebExceptionStatus Para esse erro, é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top