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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:54:55