Web 例外が発生したときに、vb.net で HTTP Web 要求から応答テキストを取得するのが困難です。
これは私がやっているコードです。
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
厄介なことに、私が連絡している API は有効な応答として 404 を使用します。リクエストをブラウザに入れると、いくつかのメッセージ テキストが表示されます。そのテキストを自分のプログラムで使用できるようにしたいと考えています。有効な 404 応答と実際のエラーを区別できないと思うので、単にエラー コードを使用してアクションを決定することはできません。
コードでは、この行
myWebResponse = CType(request.GetResponse(), HttpWebResponse)
例外をスローします。
例外では、404 コードと説明は取得できますが、応答ストリームは取得できません。常にヌルです。
200 の応答を受け取った場合、応答ストリームに問題なくテキストが表示されます。
Web 例外応答オブジェクト (Visual Studio デバッガー) で、ヘッダーとオブジェクト値を確認しましたが、応答テキストがどこにも見つかりません。リクエスト URL をブラウザに貼り付けると、404 であってもレスポンス テキストが返されます。
フィドラーでの生の応答:
HTTP/1.1 404 Not Found Connection: close Content-Type: text/plain; charset=UTF-8 Content-Length: 35 "The response Message"
プログラムで「応答メッセージ」を取得する方法についてのアイデアはありますか? サーバーで .Net を使用する必要があります。
誰でもできる助けをありがとう。