You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Postman中向C# API传递复杂对象与字符串参数的问题

Postman中向C# API传递复杂对象与字符串参数的问题

嘿,我来帮你搞定这个问题!你遇到的400验证错误,根源在于ASP.NET Core的模型绑定规则和你传递参数的方式不匹配,咱们一步步拆解解决。

问题原因分析

你的API方法定义了两个独立参数:people userstring message,但ASP.NET Core默认的绑定逻辑是:

  • 复杂对象(比如people)会尝试从请求体绑定
  • 简单类型(比如string)会尝试从查询字符串、路由参数或表单数据绑定

而你把两个参数都塞进了请求体的JSON里,框架没办法把这个JSON分别映射到两个独立参数上,导致usermessage都没被正确赋值,最终触发了必填字段的验证错误。

解决方案1:使用包装类(推荐)

最规范的做法是创建一个专门的请求模型类,把这两个参数包装起来,让框架能直接从请求体绑定整个对象。

  1. 首先定义包装类:
public class ParamTesterRequest
{
    public People User { get; set; }
    public string Message { get; set; }
}

// 你的People类(确保属性名称和JSON键对应)
public class People
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Country { get; set; }
    // 注意:如果你的类里有Address属性,JSON里也要对应上,不然会触发必填错误
}
  1. 修改API方法:
[HttpPost, Route("paramtester")]
public string ParamTester([FromBody] ParamTesterRequest request)
{
    return request.User.Name + request.Message;
}
  1. Postman里传递的JSON请求体(和你原来写的完全一致就行):
{
    "user": {
        "name": "John Doe",
        "age": 30,
        "country": "USA"
    },
    "message": "Hello, World!"
}

解决方案2:拆分参数位置(无需新建类)

如果不想创建包装类,可以把其中一个参数放到查询字符串里,另一个用[FromBody]标记从请求体获取:

  1. 修改API方法:
[HttpPost, Route("paramtester")]
public string ParamTester([FromBody] People user, [FromQuery] string message)
{
    return user.Name + message;
}
  1. Postman里的请求方式:
  • 请求URL:http://your-api-url/paramtester?message=Hello%20World(把message放到查询参数里)
  • 请求体只传People对象的JSON:
{
    "name": "John Doe",
    "age": 30,
    "country": "USA"
}

额外注意点

  • 确保你的People类属性名称和JSON里的键完全匹配(大小写不敏感,但最好保持一致),如果类里有Address属性,JSON里必须提供这个字段,或者给它加[Required(AllowEmptyStrings = true)]这类特性规避必填校验
  • Postman里要把请求体的类型改成raw -> JSON,不要选错格式

备注:内容来源于stack exchange,提问作者Hoy Cheung

火山引擎 最新活动