Existe-t-il un moyen simple d'obtenir le code d'état HTTP à partir d'un System.Net.WebException
?
c#
http-status-codes
webexception
Gilsham
la source
la source
En utilisant l' opérateur conditionnel nul (
?.
), vous pouvez obtenir le code d'état HTTP avec une seule ligne de code:La variable
status
contiendra leHttpStatusCode
. Lorsqu'il y a un échec plus général comme une erreur réseau où aucun code d'état HTTP n'est jamais envoyé, alorsstatus
sera nul. Dans ce cas, vous pouvez inspecterex.Status
pour obtenir le fichierWebExceptionStatus
.Si vous souhaitez simplement qu'une chaîne descriptive se connecte en cas d'échec, vous pouvez utiliser l' opérateur de fusion nul (
??
) pour obtenir l'erreur appropriée:Si l'exception est levée à la suite d'un code d'état HTTP 404, la chaîne contiendra "NotFound". En revanche, si le serveur est hors ligne, la chaîne contiendra "ConnectFailure" et ainsi de suite.
la source
?.
opérateur était à l'origine nommé opérateur de propagation nul ou opérateur conditionnel nul lors de la version préliminaire. Mais le resharper Atlassian donne un avertissement pour utiliser l'opérateur de propagation nul dans de tels scénarios. Bon à savoir qu'il est également appelé opérateur conditionnel nul.cela ne fonctionne que si WebResponse est une HttpWebResponse.
la source
(Je me rends compte que la question est ancienne, mais elle fait partie des meilleurs résultats sur Google.)
Une situation courante dans laquelle vous souhaitez connaître le code de réponse est la gestion des exceptions. À partir de C # 7, vous pouvez utiliser la correspondance de modèles pour n'entrer dans la clause catch que si l'exception correspond à votre prédicat:
Cela peut facilement être étendu à d'autres niveaux, comme dans ce cas où le
WebException
était en fait l'exception interne d'un autre (et nous ne sommes intéressés que par404
):Enfin: notez qu'il n'est pas nécessaire de relancer l'exception dans la clause catch lorsqu'elle ne correspond pas à vos critères, puisque nous n'entrons pas la clause en premier lieu avec la solution ci-dessus.
la source
Vous pouvez essayer ce code pour obtenir le code d'état HTTP à partir de WebException. Cela fonctionne également dans Silverlight car SL n'a pas défini WebExceptionStatus.ProtocolError.
la source
return 0
? ou mieuxHttpStatusCode?
( nullable )?var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
Je ne sais pas s'il y en a, mais s'il y avait une telle propriété, elle ne serait pas considérée comme fiable. A
WebException
peut être déclenché pour des raisons autres que les codes d'erreur HTTP, y compris de simples erreurs de réseau. Ceux-ci n'ont pas de code d'erreur http correspondant.Pouvez-vous nous donner un peu plus d'informations sur ce que vous essayez d'accomplir avec ce code. Il existe peut-être un meilleur moyen d'obtenir les informations dont vous avez besoin.
la source