2010-04-16 13 views
18

Sto tentando di gestire correttamente due diversi WebException.Gestione corretta di due WebException

Fondamentalmente sono gestite dopo aver chiamato WebClient.DownloadFile(string address, string fileName)

per quanto ne so, finora non ci sono due che devo gestire, sia WebException 's:

  • Il nome remoto non può essere risolto (cioè senza connettività di rete per accedere al server per scaricare il file)
  • (404) file non nound (cioè il file non esiste sul server)

Potrebbero esserci di più ma questo è quello che ho trovato più importante finora.

Quindi, come devo gestirlo correttamente, dato che sono entrambi WebException ma voglio gestire ciascun caso sopra in modo diverso.

Questo è quello che ho finora:

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

Come potete vedere sto controllando il messaggio per vedere che tipo di WebException è. Immagino che ci sia un modo migliore o più preciso per farlo?

Grazie

+0

Indovinare la risposta è sulla falsariga di controllare lo stato di eccezione, come invece utilizzando l'eccezione Web, '(se wEx.Status == WebExceptionStatus.Something) {// handle} (se wEx.Status == WebExceptionStatus.SomethingElse {// handle that} ' – baron

risposta

26

Sulla base di this MSDN article, si potrebbe fare qualcosa secondo le seguenti linee:

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

Io non sono certo che WebExceptionStatus.NameResolutionFailure è l'errore che state vedendo, ma è possibile esaminare l'eccezione che viene lanciato e determina cosa è lo WebExceptionStatus per quell'errore.

+0

Ho anche guardato qui: http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus.aspx che mostra tutti gli stati possibili '. Hai ragione con questi due status "quelli sono quelli che ho ricevuto in ogni situazione. Ho deciso di trattare separatamente i 404 e poi per qualsiasi altro stato di eccezione - come gli altri sembrano tutti fare con la connessione e la connettività di rete che raggrupperò insieme. – baron

Problemi correlati