Lidar com duas webException está corretamente
-
27-09-2019 - |
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 WebException
S, 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
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, é.