.NET Core中如何处理非嵌套对象的Post请求?
问题解决方法
以下是针对你接收Webhook时对象属性为NULL的排查和解决步骤:
1. 检查实体类属性与JSON字段的匹配性
确保你的MyObject类属性名和JSON中的字段完全匹配(包括大小写),示例正确的类定义如下:
public class MyObject { public string Name { get; set; } public string FavoriteSite { get; set; } }
如果第三方JSON字段命名风格和你的类不一致(比如JSON用驼峰,类用帕斯卡命名),可以通过特性指定映射:
- 用
System.Text.Json(ASP.NET Core 默认):public class MyObject { [JsonPropertyName("Name")] public string Name { get; set; } [JsonPropertyName("FavoriteSite")] public string FavoriteSite { get; set; } } - 用
Newtonsoft.Json(旧版ASP.NET):public class MyObject { [JsonProperty("Name")] public string Name { get; set; } [JsonProperty("FavoriteSite")] public string FavoriteSite { get; set; } }
2. 确认请求的Content-Type
第三方Webhook必须发送Content-Type: application/json的请求。如果对方发送的是application/x-www-form-urlencoded或其他类型,[FromBody]无法正确解析。你可以临时修改Controller读取原始请求内容验证:
[HttpPost] public async Task<IActionResult> Post() { var rawJson = await new StreamReader(Request.Body).ReadToEndAsync(); System.Console.WriteLine(rawJson); // 输出原始JSON内容,确认格式和字段是否正确 var o = System.Text.Json.JsonSerializer.Deserialize<MyObject>(rawJson); return Ok(); }
3. 调整JSON序列化配置
在ASP.NET Core中,可通过配置开启大小写不敏感匹配,避免因大小写差异导致解析失败:
// .NET 6+ Program.cs builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; });
4. 验证JSON格式合法性
将读取到的原始JSON内容复制到JSON编辑器中,检查是否存在语法错误、特殊字符或编码问题,确保JSON格式完全合规。
内容的提问来源于stack exchange,提问作者Dan Chase
相关产品推荐
相关产品推荐

