Comment puis-je lire la réponse d'une requête web lorsque l'État n'est pas 200?

Je vais avoir de la difficulté à obtenir le texte de la réponse à partir d'un web HTTP en demande vb.net quand je reçois une exception web.

C'est le code que j'ai fais avec.

Try
            myWebResponse = CType(request.GetResponse(), HttpWebResponse)
            myStreamReader = New StreamReader(myWebResponse.GetResponseStream())

            ResponseText = myStreamReader.ReadToEnd
            If myWebResponse.StatusCode = HttpStatusCode.Accepted Or myWebResponse.StatusCode = 200 Then
                SendResult = True 'Sent 
                SendStatus = 1 'message sent successfully
                Try
                    Integer.TryParse(myWebResponse.Headers("Number-Of-MT-PDU"), num_MT_PDU)
                Catch ex As Exception
                End Try
            Else
                SendStatus = 2 'message processed but not sent successfully
            End If
        Catch e As WebException
            If (e.Status = WebExceptionStatus.ProtocolError) Then
                Dim response As WebResponse = e.Response
                Using (response)
                    Dim httpResponse As HttpWebResponse = CType(response, HttpWebResponse)
                    statusCode = httpResponse.StatusCode
                    Try
                        myStreamReader = New StreamReader(response.GetResponseStream())
                        Using (myStreamReader)
                            ResponseText = myStreamReader.ReadToEnd & "Status Description = " & HttpWebResponse.StatusDescription
                        End Using
                    Catch ex As Exception
                        Logger.LogError(Me, ex)
                    End Try
                End Using

Ennuyant, l'API je suis contactant utilise une 404 comme une réponse valide. Si je mets de la demande dans un navigateur, un message texte sera affiché. Je veux être en mesure d'utiliser ce texte dans mon programme. Je ne peux pas tout simplement utiliser le code d'erreur pour déterminer les mesures que je ne pense pas que je peux faire la différence entre un valide réponse 404 et une erreur réelle.

Dans le code de cette ligne

myWebResponse = CType(request.GetResponse(), HttpWebResponse)

déclenche une exception.

À l'exception que je peux obtenir le code 404 et la description mais pas le flux de réponse. Il est toujours null.

Si je reçois une réponse 200-je obtenir le texte dans le flux de Réponse pas de problème.

Dans le web exception de la réponse de l'objet (dans Visual Studios débogueur) j'ai vérifié les en-têtes et les valeurs de l'objet et ne peut pas trouver le texte de la réponse de n'importe où. Si je colle l'URL dans un navigateur, je reçois la réponse du texte, même si c'est une erreur 404.

La crue de réponse dans un violon:

HTTP/1.1 404 Not Found Connection: close Content-Type: text/plain; charset=UTF-8 Content-Length: 35 "The response Message"

Des idées sur comment je peux obtenir "Le Message de réponse" dans mon programme? J'ai à utiliser .Net sur le serveur.

Merci pour toute aide, n'importe qui peut donner.

Une chose qui pourrait donner un indice serait d'utiliser Fiddler pour voir ce qui se fait de revenir sur le fil
Je pense que j'ai eu le même problème avant. Ne pouvez pas utiliser webclient. Attendez, laissez-moi chercher.
J'ai demandé la même question stackoverflow.com/questions/9062089/.... Pas de réponse non plus.
Je viens de toucher localhost/test (qui n'existe pas) à l'aide de WebClient.DownloadData et la base WebException (je suis en utilisant DotLisp, il y a donc une BacktraceException et un TargetInvocationException "en haut".) Response existe et l'équivalent de New StreamReader(response.GetResponseStream()).ReadToEnd fonctionne très bien.

OriginalL'auteur Ruairi O'Brien | 2011-08-22