C#调用postcodes.io POST接口发送邮编数组参数失败如何解决
问题排查
- 传参结构不匹配:目标接口要求
postcodes字段为字符串数组类型,现有代码将邮编列表拼接为逗号分隔字符串,不符合接口入参规范 - JSON序列化错误:直接调用
Dictionary.ToString()不会生成合法JSON结构,默认输出为Dictionary的类型名称,完全不符合POST请求要求的JSON格式 - HttpClient使用不规范:每次请求新建HttpClient实例会导致套接字资源泄漏,高并发场景下极易引发请求失败
最佳实现方案
推荐使用.NET内置的System.Text.Json库完成JSON序列化,无需引入第三方依赖,示例代码如下:
首先引入必要命名空间:
using System.Net.Http; using System.Text; using System.Text.Json; using System.Collections.Generic; using System.Threading.Tasks;
业务代码实现:
// 全局静态HttpClient实例(仅初始化一次,避免重复创建资源泄漏) private static readonly HttpClient _httpClient = new HttpClient(); public async Task<HttpResponseMessage> RequestPostcodesAsync() { // 构造邮编列表 var postcodeList = new List<string> { "OX49 5NU", "M32 0JG", "NE30 1DP" }; // 构造和接口要求完全匹配的请求体结构 var requestBody = new { postcodes = postcodeList }; // 序列化为标准JSON字符串 var jsonContent = JsonSerializer.Serialize(requestBody); // 构造POST请求内容 var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); const string requestUri = "https://api.postcodes.io/postcodes/"; // 发送请求 return await _httpClient.PostAsync(requestUri, content); }
如果习惯使用Newtonsoft.Json,只需将序列化逻辑替换为JsonConvert.SerializeObject(requestBody)即可,需提前安装Newtonsoft.Json NuGet包。
以上代码生成的请求体完全匹配接口要求的结构:
{ "postcodes" : ["OX49 5NU", "M32 0JG", "NE30 1DP"] }
内容的提问来源于stack exchange,提问作者Rudy W
相关产品推荐
相关产品推荐

