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

HttpClient向ASP.NET API发送JSON时接口接收参数全为null的问题咨询

问题根因

你当前遇到的参数全为null的核心原因是:客户端发送的是JSON格式的请求体,但API接口默认只会从查询字符串、表单数据中绑定零散的入参,不会主动解析请求体中的JSON内容,因此无法匹配到对应的参数值。


1. 验证生成的JSON是否符合要求的方法

  • 先单独输出序列化结果验证:构造StringContent前先把序列化后的JSON字符串打印/打日志,确认结构是否和期望一致:
    var jsonStr = JsonConvert.SerializeObject(formData);
    // 输出jsonStr查看,正常结构应为 {"listId":"xxx","email":"xxx","firstName":"xxx","lastName":"xxx"}
    
  • 读取StringContent内容验证:构造完content后可以读取其内容确认数据是否正确写入:
    var sendContent = await content.ReadAsStringAsync();
    // 输出sendContent即可确认实际要发送的内容
    
  • 抓包验证:用Fiddler、Wireshark或浏览器开发者工具的网络面板,抓取实际发出的POST请求,查看请求体内容、Content-Type请求头是否为application/json。

2. 实现API正常接收有效值的方案

提供两种可选方案,根据你的实际场景选择即可:

方案1:修改API接口(更符合REST规范,无需修改客户端代码)

直接用你定义的Report类作为API入参,加上[FromBody]特性,告知ASP.NET Core从请求体的JSON中解析参数:

[HttpPost]
[Route("Create")]
public async Task<IActionResult> Create([FromBody] Report formData)
{
    // 直接通过formData.listId、formData.email等属性取值即可
}

方案2:修改客户端发送逻辑(无需修改现有API接口)

如果不能调整API定义,就把客户端发送的内容从JSON改成表单格式,适配API的参数绑定逻辑:

string apiurl = "http://localhost:5000/";
// 替换原来的StringContent为FormUrlEncodedContent
var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
    {"listId", formData.listId},
    {"email", formData.email},
    {"firstName", formData.firstName},
    {"lastName", formData.lastName}
});

using (var httpClient = new HttpClient())
{
    using (var response = await httpClient.PostAsync($"{apiurl}api/Contact/Create", content))
    {
        await response.Content.ReadAsStringAsync();
    }
}

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:04