c# - 使用参数发布到 api
问题描述
尝试调用 api :"https://api.postcodes.io/postcodes/" 是具有这种结构的后调用:
{
"postcodes" : ["PR3 0SG", "M45 6GN", "EX165BL"]
}
创建邮政编码数组以及如何发送它们的最佳做法是什么?我的代码:
List<string> test = new List<string>();
test.Add("OX49 5NU");
test.Add("M32 0JG");
test.Add("NE30 1DP");
var requestString = string.Join(",", test.ToArray());
var queryParams = new Dictionary<string, string>()
{
{ "postcodes", requestString }
};
var s = queryParams.ToString();
var data = new StringContent(queryParams.ToString(), Encoding.UTF8, "application/json");
var uri = "https://api.postcodes.io/postcodes/";
var httpClient = new HttpClient();
var response = await httpClient.PostAsync(uri, data);
不工作。
亲切的问候/鲁迪
解决方案
您根本不应该使用.ToString()
并依赖 .Net 中可用的精彩 JSON 序列化。
List<string> postcodes = new List<string>
{
"OX49 5NU",
"M32 0JG",
"NE30 1DP"
};
var json = System.Text.Json.JsonSerializer.Serialize(new { postcodes });
var content = new StringContent(json, Encoding.UTF8, "application/json");
using var httpClient = new HttpClient();
var uri = "https://api.postcodes.io/postcodes/";
var response = await httpClient.PostAsync(uri, content);
new { postcodes }
postcodes
创建一个匿名类型,其名称为由邮政编码列表组成的单个属性。
还要注意using
httpClient 上的。对于一个简单的示例,它可能无关紧要,但您至少应该正确处理 httpClient 。
更新
正如@marsze 指出的那样,通常最好使用,在需要时IHttpClientFactory
调用this 将允许 .Net 汇集 HttpClients 可以在不消耗额外资源的情况下重复使用。这确实超出了问题/答案的范围。CreateClient()
HttpClient
推荐阅读
- python - 使用带有 cuda 的 pytorch 时视频流很慢
- apache-kafka - Kafka 主题在 Leader 选举后丢失所有副本
- flutter - 飞镖清单
课堂问题 - python - 尝试将油门控制添加到 python 中的并行 API 调用
- java - 如何找出 webflux 在处理请求期间花费最多时间的地方
- python - 获取视频剪辑的最后一帧并使用moviepy扩展10个scends
- azure-data-factory - 使数据工厂中的管道失败的最简单方法?
- c - 通过 FIFO 通道传输数据时阻塞独立进程
- html - 下拉列表的数据库表设计
- python - 从 python 脚本中删除文件