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

ASP.NET 5调用SpringBoot POST接口@RequestBody参数接收失败如何解决

问题排查与解决方案

核心问题定位

你已经确认Form表单传参的接口可正常调用,说明网络连通、服务端路由没有问题,故障点集中在JSON序列化、请求体构造两个环节,可按以下优先级排查:

1. StringContent编码缺失(最高概率)

你当前构造StringContent时没有指定UTF8编码,会导致请求体携带默认编码标识,SpringBoot的JSON反序列化器无法正确解析内容,直接出现@RequestBody参数为空的问题。
修改StringContent构造逻辑即可,无需单独设置ContentType头:

// 原错误写法
// StringContent content = new StringContent(stringPayload);
// content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

// 修正写法,指定UTF8编码和JSON格式
StringContent content = new StringContent(stringPayload, Encoding.UTF8, "application/json");

2. 字段命名不匹配

C#默认使用帕斯卡命名(如public string Name {get;set;}),Java默认使用驼峰命名(如private String name;),如果没有做序列化配置,Newtonsoft.Json序列化C#对象时会生成帕斯卡格式的字段名,和SpringBoot接收的DTO字段不匹配,导致反序列化失败。
解决方法二选一:

  • C#端给字段加序列化别名:
public class Category
{
    [JsonProperty("name")]
    public string Name { get; set; }
    // 其余字段同理配置别名,和Java端CategoryDTO字段名完全对齐
}
  • 全局配置Newtonsoft.Json序列化规则为驼峰命名:
var stringPayload = JsonConvert.SerializeObject(category, new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
});

3. 调试验证方法

如果修改后依然有问题,可先打印序列化后的JSON字符串,确认格式和字段是否和Postman调用时传的参数完全一致:

// 输出序列化结果,和Postman的请求体对比
Console.WriteLine(stringPayload);

优化建议

不要在请求逻辑里每次new HttpClient,会导致套接字资源耗尽,ASP.NET 5推荐使用IHttpClientFactory注入创建HttpClient实例,性能和稳定性更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:03