C#对接火山引擎豆包API实现业务调用
调用豆包v1 API时,需采用AK/SK鉴权方式:首先构造一个POST请求,在请求头中包含X-BC-Signature(采用HMAC-SHA256签名)、X-BC-Timestamp、Authorization等字段。然后在请求体中添加model、messages等必要字段。最后,异步发送该请求,并对返回的JSON响应进行解析。

要在C#项目中调用火山引擎豆包(Doubao)API完成实际业务逻辑,比如发送用户提问并获取大模型回复,必须正确构造HTTP请求、处理鉴权签名、解析JSON响应,并适配豆包API当前v1版本的接口规范。
准备Access Key与Secret Key
登录火山引擎控制台→进入「访问密钥」页面→创建新的「API密钥(AK/SK)」→复制Access Key ID和Secret Key值,保存到安全位置。这一步不可跳过,
【没有合法AK/SK将无法通过身份校验,所有请求返回401】
不要在代码中硬编码密钥。推荐使用.NET 6+的IConfiguration从appsettings.json或环境变量读取。
安装必要NuGet包
在项目中执行以下命令安装HttpClient相关依赖:
dotnet add package System.Net.Http.Json
dotnet add package Microsoft.Extensions.Http
dotnet add package Newtonsoft.Json
若使用.NET Core 3.1或.NET 5,需额外安装System.Text.Json(但建议升级至.NET 6+以获得原生支持)。
构建带签名的HTTP客户端
豆包API要求所有请求携带X-BC-Signature头,签名算法为HMAC-SHA256,密钥为Secret Key,原文为:HTTP方法 + n + 请求路径 + n + 时间戳(秒级Unix时间戳)+ n + JSON请求体(无空格)。
方法一:手动拼接签名
① 创建HttpRequestMessage实例,设置Method为POST,RequestUri为https://ark.cn-beijing.volces.com/api/v1/chat/completions;
② 调用DateTimeOffset.UtcNow.ToUnixTimeSeconds()获取当前时间戳,存入变量timestamp;
③ 将请求体对象序列化为紧凑JSON字符串(不带换行/缩进),例如Newtonsoft.Json.JsonConvert.SerializeObject(body, new JsonSerializerSettings { Formatting = Formatting.None });
④ 拼接签名原文:POSTn/api/v1/chat/completionsn{timestamp}n{jsonBody};
⑤ 使用HMACSHA256.ComputeHash计算签名值,再Base64编码,赋值给request.Headers.Add("X-BC-Signature", signature);
⑥ 同时添加X-BC-Timestamp头,值为timestamp字符串;
⑦ 添加Authorization头,格式为"Bearer {AccessKeyID}"。
方法二:使用最新SDK(推荐)
首先,下载火山引擎最新的C# SDK(volc-sdk-csharp)。接着,引用VolcEngine.SDK.Core和VolcEngine.SDK.Ark。然后,通过代码“ArkClient client = new ArkClient(accessKeyId, secretKey, "cn-beijing");”直接初始化。之后,便可调用“client.ChatCompletionsAsync(request)”来自动完成签名与重试逻辑。
构造符合豆包v1规范的请求体
请求体必须是application/json,且顶层字段严格匹配文档:model、messages、stream(可选)、max_tokens(可选)、temperature(可选)。
messages数组至少包含一个role为"user"的对象,content为非空字符串;不能出现role为system的条目(豆包v1暂不支持system prompt)。
示例body对象(用Newtonsoft.Json序列化):
{"model":"doubao-pro","messages":[{"role":"user","content":"你好,请用中文简单介绍你自己"}],"max_tokens":512,"temperature":0.7}
【model字段值必须与控制台开通的模型名称完全一致,大小写敏感,填错会返回400】
发起异步调用并解析响应
使用HttpClient.SendAsync(request)发送已签名请求,检查response.IsSuccessStatusCode是否为true。
若成功,调用await response.Content.ReadFromJsonAsync
若失败,读取response.Content.ReadAsStringAsync()获取错误详情,常见错误码:400(参数错误)、401(签名失败)、429(QPS超限)、500(服务端异常)。
这一步操作起来很简单,直接把文件拖进去就行。
-
下载
-
- 关于柯南的沙雕网名有哪些
- 角色扮演 | 1
- 网名
-
- 最新中性名字男女通用网名有哪些
- 角色扮演 | 1
- 网名
-
- 关于蓝色说唱的网名有哪些
- 角色扮演 | 1
- 网名
-
- 我好喜欢你是什么梗?
- 角色扮演 |