.NET 9 Minimal API:Bruno传入DTO仅PositionNumber非空问题排查
问题分析与解决方案
核心原因
.NET 默认的System.Text.Json序列化器在绑定请求体时,不会自动将蛇形命名(如phd_user_name)映射到帕斯卡命名(如PhdUserName)。你的JSON请求体中,只有PositionNumber的键名和DTO字段名完全一致(大小写匹配),因此成功绑定;其余蛇形命名的字段无法与DTO的帕斯卡字段名匹配,导致值为null。
解决方案
方案1:全局配置蛇形命名映射
在Program.cs中配置Minimal API的JSON序列化选项,让框架自动处理蛇形到帕斯卡的转换:
builder.Services.ConfigureHttpJsonOptions(options => { options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower; });
配置后,所有请求体的蛇形命名字段都会自动映射到DTO的帕斯卡命名字段,无需修改DTO类。
方案2:给DTO字段添加特性指定映射
如果不想全局修改规则,可以给每个需要绑定的DTO字段添加[JsonPropertyName]特性,指定对应的JSON键名:
public partial class PhdUserDTO { public string PhdUserId { get; set; } = null!; [JsonPropertyName("phd_user_name")] public string? PhdUserName { get; set; } [JsonPropertyName("phd_win_userid")] public string? PhdWinUserid { get; set; } [JsonPropertyName("phd_employee_id")] public string? PhdEmployeeId { get; set; } [JsonPropertyName("phd_user_status")] public string? PhdUserStatus { get; set; } // 剩余字段保持不变 }
方案3:检查请求头Content-Type
确保在Bruno中发送请求时,请求头的Content-Type设置为application/json。如果未设置该头,.NET可能无法正确解析JSON请求体,导致字段绑定失败。
验证建议
修改后重新运行API,在Bruno中再次发送请求,通过断点调试查看userDto的字段值是否正常填充。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

