Question

Je suis en train de gérer deux correctement de WebException différents.

En fait, 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, à la fois de WebException:

  • Le nom distant n'a pas pu être résolu (à savoir la connectivité Pas de réseau au serveur d'accès au fichier de téléchargement)
  • (404) Fichier non nound (à savoir le fichier n'existe pas sur le serveur)

Il est peut-être plus, mais ce que j'ai trouvé le plus important à ce jour.

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

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 ya une meilleure ou d'une manière plus précise pour le faire?

Merci

Était-ce utile?

La solution

Basé sur cet article MSDN , 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 qui est levée et déterminer quel est le WebExceptionStatus pour cette erreur est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top