J'essaie d'améliorer les informations fournies en réponse à une erreur traitée dans une application.
Ceci est le code: p> La WebException est jetée La * ligne p> actuellement tout ce que je vois à l'exception est "Le serveur distant renvoyé une erreur: (500) erreur de serveur interne". J'ai examiné l'exception dans le débogage, mais les informations dont j'ai besoin n'est pas, je suppose que la réponse aurait besoin d'être lue pour voir cette information mais elle ne gagne jamais aussi loin. P> Si je prends La demande et la collez-la dans mon navigateur directement, je peux voir les détails d'erreur au format XML renvoyé de l'API que j'appelle, des informations comme: p> y a-t-il manière que je puisse changer ce code afin que je puisse passer au-delà de l'erreur 500 et voir la réponse réelle, j'aimerais pouvoir analyser ce XML pour connaître le problème réel pour l'échec. P> Note : L'exception a une ex.response (system.net.httpwebreexonse), mais je ne vois pas les informations dont j'ai besoin là-bas, seulement une charge d'informations d'en-tête. P> P>
3 Réponses :
Essayez d'utiliser Fiddler . Son proxy de débogage, qui vous montrera toutes les données envoyées entre client et serveur. Vous serez capable de voir tous les en-têtes et tout contexte aussi. P>
@Dannykpowell: Cela doit avoir pour les développeurs Web.
Ou simplement des outils de développeur chromé :) L'onglet Réseau fait la même chose, sa mesure a moins d'options pour interférences avec les messages, mais son filtrage propre et correct est prêt :)
Vous pouvez obtenir la réponse d'erreur de l'exception ....
try
{
....
} catch(Exception e) {
if (e is WebException && ((WebException)e).Status==WebExceptionStatus.ProtocolError)
{
WebResponse errResp = ((WebException)e).Response;
using(Stream respStream = errResp.GetResponseStream())
{
// read the error response
}
}
}
Juste jeter un coup d'oeil à cela maintenant. Premier problème frappé avec ce code est que "ResponSError" n'apparaît pas faire partie de la WebExceptionStatus Enum msdn.microsoft.com/en-us/library/...
Marquant cela aussi correct en dépit de cela, comme cette réponse m'aidait à arriver à une solution. Mon code (vb.net) ressemble à: attrape ex comme WebException à l'aide de lecteur comme streamreader = Nouveau StreamReader (ex.Response.getreesponsestream ()) Strxml = lecteur.readtoend () Fin
Désolé pour ça, il devrait réellement être webExceptionStatus.protocolerror. Dans ce cas, l'objet de réponse doit avoir le flux d'erreur. Maintenant, inspit-il de cela, si votre flux d'erreur est vide, cela pourrait signifier que le serveur n'avait rien envoyé, ou il y a un bogue quelque part. Pouvez-vous obtenir un traçonnen à utiliser Ferozedaud.Blogspot.com/2009/08/ Traçage-with-systemnet.html ? Ce spectacle Willl si le serveur a envoyé une entité de réponse ou non.
System.Net.WebResponse response = null;
try
{
response = wreq.GetResponse();
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ProtocolError)
{
string error = new System.IO.StreamReader(e.Response.GetResponseStream()).ReadToEnd();
}
}
catch (Exception e)
{
}
as simple as this, You will get entire response in the string error.
+1 Catching La WebException est meilleure que de saisir l'exception générique, sinon vous ignorez essentiellement tous les autres.