Как получить тело из HttpWebResponse с использованием Visual Basic (VS2017) - PullRequest
0 голосов
/ 17 октября 2018

У меня чертовски много времени с этим проектом, над которым я работаю, и действительно могу использовать вашу помощь.Я постараюсь сделать это как можно более кратким.
По сути, у меня есть настройка пользовательского интерфейса, которая собирает информацию о пользователе и отправляет REST API вызовы в мою систему управления вызовами.В настоящее время он работает в отношении добавления линий, соединительных линий и т. Д.

Проблема в том, что я хочу видеть тело ответа, возвращаемого с сервера.Если у меня есть обработка исключений, найдите код состояния OK и загорится зеленым индикатором, он будет работать так, как я и просил.
Но я не могу получить его, чтобы дать мне полное тело ответа, как при отправкевызов в POSTMAN.

Вот ответ, который я получаю в POSTMAN и хотел бы получить, когда я выполняю вызов API в VB.Я получаю Status Code 400 с этим в теле.

{"подсказка": "Указанный шаблон (2952) уже используется владельцем строки.", "Details": "ConflictingPattern "," code ":" P0001 "," message ":" invalid_parameter "}

Я перепробовал все комбинации критериев поиска, которые я смог найти на этом сайте, и, похоже, у меня ничего не работает,Я просто не знаю, что я делаю не так.Вот пример того, как сейчас настраивается запрос / ответ.

Try
    '//Setup HTTP connection and modify headers
    Dim APIRequest As HttpWebRequest = HttpWebRequest.Create("https://" & CMIP.Text & "/api/v1/" & Custom_Endpoint_URL.Text)
    APIRequest.Method = "POST"
    APIRequest.Headers.Add("Authorization", "Bearer " + LatestToken.Text)
    APIRequest.ContentType = "application/json"
    'WebCall.Headers.Add("Prefer", "return=representation") 'Only used for testing purposes

    '//Prepare JSON request
    Dim bytearray As Byte() = System.Text.Encoding.UTF8.GetBytes(Custom_Body.Text)
    APIRequest.ContentLength = bytearray.Length

    '//Bypass self-signed cert issue
    ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertifications

    '//Load JSON payload into datastream
    Dim datastream As Stream = APIRequest.GetRequestStream()
    datastream.Write(bytearray, 0, bytearray.Length)

    ''//Response
    Dim response As WebResponse = APIRequest.GetResponse
    Dim responsestream As Stream = response.GetResponseStream
    Dim responsereader As New StreamReader(responsestream)
    Dim responsereadstring As String = responsereader.ReadToEnd

    '//Send response to results window
    Response_Box.Text = responsereadstring

Catch ex As WebException

End Try

Я хотел выяснить это сам, но я занимался этим уже несколько дней, и я нахожусь наЯ бью головой об стену.

1 Ответ

0 голосов
/ 17 октября 2018

Метод HttpWebRequest.GetResponse выдает WebException, когда ответ имеет код состояния в диапазоне 4xx или 5xx.Основываясь на информации в вашем вопросе, ваш вызов API возвращает код состояния 400, так что это вызовет исключение.Ваш блок Catch полностью пуст, поэтому вы молча игнорируете этот случай.(Вот почему вы никогда не должны оставлять свои Catch блоки пустыми - вы никогда не узнаете, что что-то не так.)

Оказывается, класс WebException имеет свойство Response(а также Status), так что вы можете получить данные оттуда.Вам просто нужно заполнить блок Catch:

    Catch ex As WebException

        Dim responsestream As Stream = ex.Response.GetResponseStream
        Dim responsereader As New StreamReader(responsestream)
        Dim responsereadstring As String = responsereader.ReadToEnd
        Response_Box.Text = responsereadstring

    End Try
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...