J'ai le code suivant:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
request.Credentials = MyCredentialCache;
try
{
request.GetResponse();
}
catch
{
}
Comment puis-je capturer une erreur 404 spécifique? Le WebExceptionStatus.ProtocolError peut seulement détecter qu'une erreur s'est produite, mais ne peut pas donner le code exact de l'erreur.
Par exemple:
catch (WebException ex)
{
if (ex.Status != WebExceptionStatus.ProtocolError)
{
throw ex;
}
}
N'est tout simplement pas assez utile... l'exception de protocole pourrait être 401, 503, 403, n'importe quoi vraiment.
13 votes
NNNOOOOOOOOOOOOO! Ne capturez pas
System.Exception
, et ne dépendez pas du texte de l'exception dans votre gestionnaire!2 votes
La réponse de John Saunders était la plus complète. Je pense que les gens l'ont simplement dévalué par pure méchanceté.
3 votes
Ne pas utiliser
throw ex
, vous allez générer une nouvelle exception avec une pile d'appels vide. Utilisez simplementthrow
.2 votes
J'ai toujours trouvé cela frustrant, moi-même. Une exception ne devrait pas être lancée si vous obtenez une réponse bien formée, et un message d'erreur de protocole est certainement bien formé. La classe devrait permettre à l'utilisateur d'interpréter les résultats et d'agir en conséquence.
0 votes
@JeremyHolovacs les exceptions ne sont plus lancées pour des choses comme 404 dans les clients http plus récents. "Ne pas utiliser les exceptions pour le flux de contrôle" ne semble pas avoir survécu à l'équipe qui a construit
WebRequest