如何使用Visual Basic(VS2017)从HttpWebResponse获取正文

时间:2018-10-16 22:21:48

标签: json vb.net rest visual-studio-2017

我正在为这个正在进行的项目度过难关,可以真正使用您的帮助。我会尽量保持简洁。
基本上,我有一个UI设置来收集用户信息并将REST API呼叫发送到我的呼叫控制系统。目前,它正在增加线路,中继线等方面工作。

问题是我希望看到响应主体从服务器返回。如果我有异常处理,请寻找一个OK状态代码,并将指示器变成绿色,它会按照我的要求执行。
但是我无法像在POSTMAN中发送呼叫时那样,给我完整的响应内容。

这是我在POSTMAN中返回的响应,并且想在我用VB进行API调用时返回。我在体内得到Status Code 400

  

{       “ hint”:“线路所有者已经在使用指定的模式(2952)。”,       “细节”:“冲突模式”,       “ 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 :(得分:1)

当响应的状态码在4xx或5xx范围内时,HttpWebRequest.GetResponse方法将引发WebException。根据问题中的信息,您的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