Gestión de dos WebException está adecuadamente
-
27-09-2019 - |
Pregunta
Estoy tratando de manejar dos WebException
de diferente forma adecuada.
Básicamente se manejan después de llamar WebClient.DownloadFile(string address, string fileName)
Que yo sepa, hasta ahora hay dos que tengo que manejar, tanto de WebException
:
- El nombre remoto podría no ser resuelto (es decir, la conectividad de red No a servidor de acceso a archivo de descarga)
- (404) El archivo no nound (es decir, el archivo no existe en el servidor)
Puede haber más, pero esto es lo que he encontrado más importante hasta el momento.
Entonces, ¿cómo debo manejar esto correctamente, ya que son de tanto WebException
pero quieren manejar cada caso por encima de manera diferente.
Esto es lo que tengo hasta ahora:
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 se puede ver estoy comprobando que el mensaje para ver qué tipo de WebException que es. Quiero suponer que hay una mejor o de manera más precisa para hacer esto?
Gracias
Solución
Basado en este MSDN artículo , se podría hacer algo a lo largo de las siguientes líneas:
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
}
}
No estoy seguro de que WebExceptionStatus.NameResolutionFailure
es el error que está viendo, pero se puede examinar la excepción que se inicia y determinar cuál es el WebExceptionStatus
para que el error es.