You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中Web请求如何通过Newtonsoft.Json提取accessToken

提取API响应中的accessToken方法

先修正原代码中的请求错误

原代码里request.ContentLength = 0是错误的,服务器需要知道请求体的长度才能正确接收数据,应该改成:

request.ContentLength = bArray.Length

另外,建议用Using语句管理流对象,避免资源泄漏,原代码直接Close流的写法不够安全。


提取accessToken的两种实现方式

方式一:使用动态类型(无需定义实体类)

直接将响应JSON反序列化为动态对象,通过属性名直接获取accessToken:

Dim accessToken As String
Dim body As String = "{""username"": ""abc"", ""password"": ""abc123""}"
Dim request As WebRequest = WebRequest.Create("http://xxx.xxx.xxx.xxx/api/getaccessToken")
request.Method = "POST"
request.ContentType = "application/json"

Dim bArray As Byte() = Encoding.UTF8.GetBytes(body)
request.ContentLength = bArray.Length

' Using语句自动释放流资源
Using dStream As Stream = request.GetRequestStream()
    dStream.Write(bArray, 0, bArray.Length)
End Using

' 处理响应
Using response As WebResponse = request.GetResponse()
    Using streamReader As New StreamReader(response.GetResponseStream())
        Dim streamR = streamReader.ReadToEnd()
        ' 反序列化为动态对象
        Dim jsonResponse = JsonConvert.DeserializeObject(Of Object)(streamR)
        ' 提取accessToken
        accessToken = jsonResponse("accessToken").ToString()
    End Using
End Using

Return accessToken

方式二:使用强类型实体类(更安全)

先定义和响应结构匹配的类,再反序列化,这种方式在编译期就能检查属性名是否正确,避免运行时错误:

' 定义响应实体类
Public Class TokenResponse
    Public Property accessToken As String
    Public Property expires As String
End Class

' 主代码部分
Dim accessToken As String
Dim body As String = "{""username"": ""abc"", ""password"": ""abc123""}"
Dim request As WebRequest = WebRequest.Create("http://xxx.xxx.xxx.xxx/api/getaccessToken")
request.Method = "POST"
request.ContentType = "application/json"

Dim bArray As Byte() = Encoding.UTF8.GetBytes(body)
request.ContentLength = bArray.Length

Using dStream As Stream = request.GetRequestStream()
    dStream.Write(bArray, 0, bArray.Length)
End Using

Using response As WebResponse = request.GetResponse()
    Using streamReader As New StreamReader(response.GetResponseStream())
        Dim streamR = streamReader.ReadToEnd()
        ' 反序列化为强类型对象
        Dim tokenResponse = JsonConvert.DeserializeObject(Of TokenResponse)(streamR)
        ' 直接获取属性值
        accessToken = tokenResponse.accessToken
    End Using
End Using

Return accessToken

内容的提问来源于stack exchange,提问作者user19613128

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 13:52:41