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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:06:02