J'utilise la WebClient
classe pour publier des données dans un formulaire Web. Je souhaite obtenir le code d'état de réponse de la soumission du formulaire. Jusqu'à présent, j'ai découvert comment obtenir le code d'état s'il y a une exception
Catch wex As WebException
If TypeOf wex.Response Is HttpWebResponse Then
msgbox(DirectCast(wex.Response, HttpWebResponse).StatusCode)
End If
Cependant, si le formulaire est soumis avec succès et qu'aucune exception n'est levée, je ne connais pas le code d'état (200, 301, 302, ...)
Existe-t-il un moyen d'obtenir le code d'état lorsqu'il n'y a pas d'exceptions levées?
PS: je préfère ne pas utiliser httpwebrequest / httpwebresponse
Vous pouvez vérifier si l'erreur est de type
WebException
, puis inspecter le code de réponse;ou
la source
Il existe un moyen de le faire en utilisant la réflexion. Cela fonctionne avec .NET 4.0. Il accède à un champ privé et peut ne pas fonctionner dans d'autres versions de .NET sans modifications.
Je n'ai aucune idée pourquoi Microsoft n'a pas exposé ce champ avec une propriété.
la source
Si vous utilisez .Net 4.0 (ou moins):
Si vous utilisez .Net 4.5.X ou plus récent, passez à HttpClient :
la source
La réponse d'Erik ne fonctionne pas sur Windows Phone tel quel. Ce qui suit fait:
Au moins il le fait lors de l'utilisation
OpenReadAsync
; pour les autresxxxAsync
méthodes, des tests minutieux seraient fortement recommandés. Le framework appelle GetWebResponse quelque part le long du chemin du code; il suffit de capturer et de mettre en cache l'objet de réponse.Le code de secours est 200 dans cet extrait de code car les véritables erreurs HTTP - 500, 404, etc. - sont de toute façon signalées comme des exceptions. Le but de cette astuce est de capturer les codes sans erreur, dans mon cas spécifique 304 (non modifié). Ainsi, la solution de secours suppose que si le code d'état est indisponible, au moins c'est un code non erroné.
la source
Tu devrais utiliser
la source
However if the form is submitted successfully and no exception is thrown...
C'est ce que j'utilise pour étendre les fonctionnalités de WebClient. StatusCode et StatusDescription contiendront toujours le code / description de réponse le plus récent.
Ainsi, vous pouvez faire un post et obtenir un résultat via:
la source
Juste au cas où quelqu'un d'autre aurait besoin d'une version F # du hack décrit ci-dessus.
la source
Vous devriez pouvoir utiliser l'appel "client.ResponseHeaders [..]", voir ce lien pour des exemples de récupération de données à partir de la réponse
la source
Vous pouvez essayer ce code pour obtenir le code d'état HTTP à partir de WebException ou d'OpenReadCompletedEventArgs.Error. Cela fonctionne également dans Silverlight car SL n'a pas défini WebExceptionStatus.ProtocolError.
la source