J'ai le code suivant:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "HEAD";
request.Credentials = MyCredentialCache;
try
{
request.GetResponse();
}
catch
{
}
Comment puis-je détecter une erreur 404 spécifique? WebExceptionStatus.ProtocolError peut uniquement détecter qu'une erreur s'est produite, mais pas donner le code exact de l'erreur.
Par exemple:
catch (WebException ex)
{
if (ex.Status != WebExceptionStatus.ProtocolError)
{
throw ex;
}
}
Ce n'est tout simplement pas assez utile ... l'exception de protocole pourrait être 401, 503, 403, vraiment n'importe quoi.
System.Exception
et ne dépendez pas du texte d'exception dans votre gestionnaire!throw ex
, vous générerez une nouvelle exception avec une pile d'appels vide. Utilisez simplementthrow
.WebRequest
Réponses:
Utilisez le
HttpStatusCode Enumeration
, spécifiquementHttpStatusCode.NotFound
Quelque chose comme:
Où
we
est unWebException
.la source
we.Response
ne l'est pasHttpWebResponse
. Si le code souhaite supposer qu'il aura toujours ce type, il devrait simplement jeter:HttpWebResponse errorResponse = (HttpWebResponse)we.Response;
. Cela jettera un expliciteInvalidCastException
si l'impossible se produit, au lieu d'un mystérieuxNullReferenceException
.An object reference is required for the non-static field, method, or property 'WebException.Response'
ce code.la source
throw
(rethrow) à la fin de votrecatch
, sinon cela mangera tout autre type deWebException
.WebRequest
ne met pas en œuvreIDisposable
.En C # 6, vous pouvez utiliser des filtres d'exception .
la source
Je n'ai pas testé ça, mais ça devrait marcher
la source
catch
bloc, vu que j'avais exactement le même code dans l'essai que l'OP. Vous devriez vraiment évoquer complètement cette question à cause du code de l'OP.Je pense que si vous attrapez une WebException, il y a des informations là-dedans que vous pouvez utiliser pour déterminer s'il s'agissait d'un 404. C'est le seul moyen que je connaisse pour le moment ... J'aimerais en connaître d'autres ...
la source
Découvrez ce snipit. GetResponse lèvera une WebRequestException. Attrapez cela et vous pouvez obtenir le code d'état à partir de la réponse.
cela vient de http://msdn.microsoft.com/en-us/library/system.net.webexception.status.aspx
la source
Attrapez le type d'exception approprié
WebException
:la source
e.Response
commeHttpWebResponse
avant d'accéder auStatusCode
.Consultez MSDN sur l'état de la réponse:
la source
Pour les gens de VB.NET qui parcourent ceci, je crois que nous ne pouvons attraper l'exception que s'il s'agit vraiment d'un 404. Quelque chose comme:
la source
lorsque les données POST ou GET sur le serveur à l'aide de la classe WebRequest, le type d'exception serait WebException.Voici le code pour l'exception de fichier introuvable
la source