2 回答
TA贡献1827条经验 获得超8个赞
Python 代码不连接字符串。它的作用是:
加载文件的内容,
使用 Base64 对它们进行编码
从 Base64 字符串创建图像 uri
创建一个字典,其键为
src图像 URI 并为其赋值。该字典被序列化为 JSON。
json 字符串发布到 API
C# 中完全相同的步骤是:
var data=File.ReadAllBytes(PathToImage);
var base64=Convert.ToBase64(data);
var imageUri="data:image/jpg;base64," + base64;
var json=JsonConvert.SerializeObject(new {src=imageUri});
var content=new StringContent(json,Encoding.UTF8,"application/json");
await _client.PostAsync(apiUrl,content);
这些调用可以合并,但最好先从干净的代码开始,然后再尝试缩短它。与 Python 的一个区别是这里创建了一个匿名对象,new {src=imageUri}而不是字典
HttpClient 实例是线程安全的,旨在被重用,而不是被丢弃。API 密钥可以在创建 HttpClient 实例时设置一次,例如:
_client.DefaultRequestHeaders.TryAddWithoutValidation("app_id", id);
_client.DefaultRequestHeaders.TryAddWithoutValidation("app_key",apiKey);
TA贡献1811条经验 获得超4个赞
我注意到您正在传递 PathToImage (我相信它具有图像文件的物理路径)而不是 base64 编码的图像内容。请在下面尝试:
编辑代码:
request.Content = new StringContent("{ \"src\": \"data:image/jpeg;base64,",Convert.ToBase64(System.IO.File.ReadAllBytes(PathToImage)),"\" }");如下几个语法更正 => base64 后缺少逗号。(我现在添加了)
最后,您必须指定 "\" }" 关闭带有结束引号的大括号以标记 json 对象的结尾
添加回答
举报
