我正在为这个正在进行的项目度过难关,可以真正使用您的帮助。我会尽量保持简洁。
基本上,我有一个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
我想自己解决这个问题,但是我已经呆了几天了,我正要把头撞在墙上。
答案 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