首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Visual ( HttpWebResponse )从HttpWebResponse获取主体

如何使用Visual ( HttpWebResponse )从HttpWebResponse获取主体
EN

Stack Overflow用户
提问于 2018-10-16 22:21:48
回答 1查看 1.2K关注 0票数 1

我有一个地狱的时间与这个项目,我正在工作,并可能真的需要你的帮助。我会尽量保持这一点的简洁性。

基本上,我有一个UI设置,收集用户信息并将REST API调用发送到我的呼叫控制系统。目前它正在增加线路,干线等方面的工作。

问题是,我希望看到响应的主体从服务器返回。如果我有异常处理,查找OK状态代码并将指示符变为绿色,它将按照我的要求执行。

但是,我无法像在POSTMAN中发送电话时那样,让它给我提供完整的响应。

下面是我在POSTMAN中得到的响应,希望在VB中调用API时返回。我得到了一个Status Code 400和这个在身体里。

{“提示”:“指定模式(2952)已被行所有者使用。”、“详细信息”:“冲突模式”、“代码”:"P0001“、”消息“:"invalid_parameter”}

我已经尝试了每一个组合的搜索标准,我可以在这个网站上找到,似乎没有任何工作为我。我只是不知道我做错了什么。下面是现在如何设置请求/响应的示例。

代码语言:javascript
复制
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

我想自己想办法解决这个问题,但我已经做了几天了,我已经到了头撞墙的时候了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-16 23:27:21

当响应的状态代码位于4xx或5xx范围内时,HttpWebRequest.GetResponse方法将抛出一个WebException。根据您问题中的信息,您的API调用将返回状态代码400,因此将触发异常。您的Catch块完全是空的,因此您正在静默地忽略此情况。(这就是为什么你不应该把你的Catch块空着-你永远不会知道什么东西是失败的。)

事实证明,WebException类上有一个Response属性(以及Status),因此您可以从那里获取数据。您只需填写Catch块:

代码语言:javascript
复制
    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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52844790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档