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

如何在C#中从HttpClient响应提取access_token值?

从OAuth2响应中提取access_token的几种实现方式

你可以通过以下几种方式实现类似var bearToken = Response["access_token"]的效果,结合你的现有代码给出完整实现:

前置步骤:处理响应内容

首先确保请求成功,再读取响应的JSON字符串:

var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode(); // 请求失败时抛出异常
var jsonResponse = await response.Content.ReadAsStringAsync();

方法1:使用Dictionary<string, object>(最接近你期望的索引式取值)

将JSON反序列化为字典,直接通过键名获取值:

using Newtonsoft.Json; // 需要安装Newtonsoft.Json NuGet包

var tokenDict = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonResponse);
var bearToken = tokenDict["access_token"].ToString();

方法2:使用dynamic类型(快速简洁)

无需定义模型,直接通过属性名访问:

using Newtonsoft.Json;

var tokenResponse = JsonConvert.DeserializeObject<dynamic>(jsonResponse);
var bearToken = tokenResponse.access_token.ToString();

方法3:强类型模型(推荐,类型安全)

定义与响应结构匹配的模型类,反序列化后通过属性访问,避免类型转换错误:

// 定义响应模型
public class TokenResponse
{
    public string access_token { get; set; }
    public string refresh_token { get; set; }
    public string scope { get; set; }
    public string token_type { get; set; }
    public int expires_in { get; set; }
}

// 反序列化并取值
using Newtonsoft.Json;

var tokenResponse = JsonConvert.DeserializeObject<TokenResponse>(jsonResponse);
var bearToken = tokenResponse.access_token;

额外说明

  • 若使用.NET Core 3.0+,可替换为内置的System.Text.Json,用法类似:
    // 字典方式示例(System.Text.Json)
    var tokenDict = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object>>(jsonResponse);
    var bearToken = tokenDict["access_token"].ToString();
    
  • 建议用tokenDict.TryGetValue("access_token", out var tokenValue)处理键不存在的情况,避免抛出KeyNotFoundException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:22