2010-04-16 23 views
18

J'essaie de gérer deux WebException différents correctement.Gestion de deux WebException correctement

Fondamentalement, ils sont traités après avoir appelé WebClient.DownloadFile(string address, string fileName)

AFAIK, jusqu'à présent, il y a deux je dois gérer, les deux WebException « s:

  • Le nom distant n'a pas pu être résolu (c.-à-Pas de connexion réseau pour accéder au serveur pour télécharger le fichier)
  • (404) fichier non nound (le fichier n'existe pas sur le serveur)

Il y en a peut-être plus mais c'est ce que j'ai trouvé le plus important jusqu'ici.

Alors, comment dois-je gérer cela correctement, car ils sont à la fois WebException, mais je veux gérer chaque cas ci-dessus différemment.

C'est ce que j'ai jusqu'à présent:

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

Comme vous pouvez le voir je vérifie le message pour voir quel type de WebException il est. Je suppose qu'il existe une façon meilleure ou plus précise de le faire?

Merci

+0

Deviner la réponse revient à vérifier le statut de l'exception, comme dans l'utilisation de l'exception web à la place, '(si wEx.Status == WebExceptionStatus.Quelquechose) {// handle} (si wEx.Status == WebExceptionStatus.SomethingElse) {// gérer cela} ' – baron

Répondre

26

Basé sur this MSDN article, vous pouvez faire quelque chose le long des lignes suivantes:

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

Je ne suis pas certain que WebExceptionStatus.NameResolutionFailure est l'erreur que vous voyez, mais vous pouvez examiner l'exception est levée et détermine ce que le WebExceptionStatus pour cette erreur est.

+0

J'ai également regardé ici: http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus.aspx qui vous montre tout le statut possible '. Vous avez raison avec ces deux statuts: ce sont ceux que j'ai dans chaque situation. J'ai décidé de traiter le 404 séparément et ensuite pour tout autre statut d'exception - comme tous les autres semblent le faire avec la connexion et la connectivité réseau que je vais regrouper. – baron