Comment puis-je vérifier une demande WebClient pour une erreur 404
J'ai un programme que je suis en train d'écrire que les téléchargements de fichiers. Le deuxième fichier n'est pas neccassary et est à seulement quelques fois inclus. Lors de la deuxième fichier n'est pas inclus, il sera de retour une HTTP 404
erreur.
Maintenant, le problème est que lorsque cette erreur est retournée, elle se termine à l'ensemble du programme. Ce que je veux, c'est continuer le programme et d'ignorer l'erreur HTTP. Donc, ma question est comment puis-je attraper un HTTP 404
erreur à partir d'une WebClient.DownloadFile
demande?
C'est le code actuellement utilisé::
WebClient downloader = new WebClient();
foreach (string[] i in textList)
{
String[] fileInfo = i;
string videoName = fileInfo[0];
string videoDesc = fileInfo[1];
string videoAddress = fileInfo[2];
string imgAddress = fileInfo[3];
string source = fileInfo[5];
string folder = folderBuilder(path, videoName);
string infoFile = folder + '\\' + removeFileType(retrieveFileName(videoAddress)) + @".txt";
string videoPath = folder + '\\' + retrieveFileName(videoAddress);
string imgPath = folder + '\\' + retrieveFileName(imgAddress);
System.IO.Directory.CreateDirectory(folder);
buildInfo(videoName, videoDesc, source, infoFile);
textBox1.Text = textBox1.Text + @"begining download of files for" + videoName;
downloader.DownloadFile(videoAddress, videoPath);
textBox1.Text = textBox1.Text + @"Complete video for" + videoName;
downloader.DownloadFile(imgAddress, imgPath);
textBox1.Text = textBox1.Text + @"Complete img for" + videoName;
}
source d'informationauteur Alex Gatti
Vous devez vous connecter pour publier un commentaire.
utiliser un try catch webexception dans votre code examiner le message de l'Exception, il contiendra le code d'état http.
vous pouvez effacer l'exception et continuer.
WebClient va jeter un WebException pour tous les 4xx et 5xx réponses.
Si vous spécifiquement voulez attraper l'erreur 404:
Mettre le
try
catch
à l'intérieur de votreforeach
Boucle.Fonction privée de Télécharger le fichier
Vous pouvez vérifier l'
WebException
pour l'état. Selon le code d'erreur, vous pouvez continuer ou de casser.Lire Plus @ MSDN
Suggestion
+
.Espérons que cela fonctionne pour vous.
vous pouvez essayer ce code pour obtenir le code d'état HTTP de WebException ou OpenReadCompletedEventArgs.Erreur:
Utiliser un try{} catch{} bloc avec la WebException à l'intérieur de votre boucle !
Je ne sais pas ce que IDE u utilisez mais avec Visual Studio u peut obtenir beaucoup d'informations à propos de l'exception 🙂
Que d'autres à écrire, car try-catch suffirait.
Une autre astuce est d'utiliser HTTP TÊTE pour vérifier si il n'y a rien là-bas (c'est plus léger que de faire un plein HTTP GET):
Important: Sur un 404 échec
DownloadFileTaskAsync
lèvera une exception mais AUSSI de créer un fichier vide. Cela peut être déroutant pour dire le moins!M'a pris beaucoup trop de temps à réaliser que ce code crée un fichier vide en plus de lancer une exception:
Au lieu de cela j'ai opté pour ce (
DownloadDataTaskAsync
au lieu deFile
):*Je ne suis pas sûr de 500 comportement, mais à coup sûr une erreur 404.