8

J'ai cherché des documents définitifs à ce sujet, mais je n'ai pas eu beaucoup de chance de les trouver. Fondamentalement - la question est - pour quels codes d'état HTTP revenant du serveur HttpWebRequest.GetResponse() génèrera une exception WebException après quelque chose comme say, un POST? Spécifiquement - va-t-il générer une exception WebException pour autre chose que le statut 200 OK? Ou va-t-il seulement générer une exception WebException pour dire, 400, 404 et 500 (par souci d'argument). Je veux savoir depuis, le serveur avec lequel je communique définit autre chose que HTTP 200 OK qui revient comme une condition d'erreur - et la clé est, puis-je me fier à une WebException générée pour autre chose que 200? (J'ai actuellement écrit mon code afin qu'il vérifie le code de retour à chaque fois pour s'assurer qu'il est correct et 200 sinon, prenez les mesures appropriées - mais il y a beaucoup de duplication entre ça et le bloc catch pour une exception WebException, et j'espère pouvoir le nettoyer ...)HttpWebRequest.GetResponse() - quels codes d'état spécifiques provoquent l'émission d'une exception?

Tous les liens appropriés vers la documentation seraient très appréciés.

Merci!

+0

Voir la réponse suivante à une question connexe pour une analyse approfondie: http://stackoverflow.com/questions/ 2182544/c-httpwebrequest-getresponse-comment-est-statuscode-usage-manipulé-pour-un-non-excepti/2183380 # 2183380 –

Répondre

1

Le système WebException est seperate system à partir du HTTP error system. Cela est principalement dû au fait que les erreurs HTTP sont renvoyées par le navigateur ou le client et que WebException est lancée par le serveur lors de la création de votre page. Au moment où une erreur HTTP est trouvée, la page est envoyée au client et vous ne le saurez pas.

0

Je pense que ce sera le cas, mais cela semble une hypothèse risquée à faire. Pour une chose, les MSDN docs indiquent clairement que GetResponse lèvera des exceptions autres que seulement WebException. Cependant, je peux dire à partir de l'expérience qu'une réponse "304 Non-Modifiée" sera lancée comme WebException.

Tout ce discours dégage une légère odeur de code; n'utilisez pas d'exceptions pour contrôler le flux d'exécution. Il serait préférable de gérer les exceptions de manière appropriée, puis de vérifier explicitement la propriété StatusCode pour connaître vos valeurs admissibles.

+0

Le WebException lui-même est attrapé correctement et vérifié - le problème est cependant si la méthode getresponse ne générer une exception WebException mais plutôt simplement laisser les choses se poursuivre dans certaines circonstances (ie de tout ce que j'ai vu à moins que le serveur ne publie HTTP 200 OK - une exception web apparait ... mais il n'y a rien de définitif dans la documentation J'ai vu...) –

1

Terminé par faire une vérification explicite après la réponse & intercepter et vérifier WebExceptions; donne lieu à un code dupliqué, mais il n'y a pas de réponse définitive pour savoir si une exception WebException se produira TOUJOURS si le statut n'est PAS 200.