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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top