Мне трудно получить текст ответа из веб-запроса HTTP в vb.net, когда я получаю веб-исключение.
Это код, с которым я делаю это.
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, я получаю текст в потоке Ответов без проблем.
В объекте ответа веб-исключения (в отладчике Visual Studios) я проверил заголовки и значения объекта и нигде не могу найти текст ответа. Если я вставлю URL-адрес запроса в браузер, я получу ответный текст, даже если это 404.
Необработанный ответ в fiddler:
HTTP/1.1 404 Not Found Connection: close Content-Type: text/plain; charset=UTF-8 Content-Length: 35 "The response Message"
Любые идеи о том, как я могу получить "Ответное сообщение" в моей программе? Я должен использовать .Net на сервере.
Спасибо за любую помощь, которую может оказать любой.