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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 13:04:58