2010-04-16 19 views
18

Estoy tratando de manejar dos diferentes WebException correctamente.Manejando dos WebException correctamente

Básicamente se manejan después de llamar WebClient.DownloadFile(string address, string fileName)

yo sepa, hasta ahora hay dos que tengo que manejar, tanto WebException 's:

  • el nombre remoto no se pudo resolver es decir, sin conexión a la red (para acceder al servidor para descargar el archivo)
  • (404) 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 ahora.

Entonces, ¿cómo debo manejar esto correctamente, ya que ambos son WebException, pero quiero manejar cada caso 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. ¿Asumiría que hay una manera mejor o más precisa de hacer esto?

Gracias

+0

Adivinar la respuesta es en la línea de verificar el estado de la excepción, como en el uso de la excepción web en su lugar, '(si wEx.Status == WebExceptionStatus.Something) {// handle} (si wEx.Status == WebExceptionStatus.SomethingElse) {// manejar eso} ' – baron

Respuesta

26

Basado en this MSDN article, 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 de que se arroja y determina qué es WebExceptionStatus para ese error.

+0

También miré aquí: http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus.aspx que muestra todo el estado posible '. Estás en lo correcto con esos dos estados 'esos son los que obtuve en cada situación. He decidido tratar el 404 por separado y luego cualquier otro estado de excepción, ya que los otros parecen tener conectividad de red y conexión que agruparé. – baron

Cuestiones relacionadas