如何在Postman中传递复杂对象参数?

huangapple go评论105阅读模式
英文:

how to pass complex object parameters in postman?

问题

我的C# API接受两个参数,一个是复杂对象,另一个是字符串:

  1. [HttpPost, Route("paramtester")]
  2. public string paramtester(people user, string message) {
  3. return user.name + message;
  4. }

如何通过请求体传递JSON对象?我尝试传递一个序列化的JSON对象,但完全不起作用:

  1. {
  2. "user": {
  3. "name": "John Doe",
  4. "age": 30,
  5. "country": "USA"
  6. },
  7. "message": "Hello, World!"
  8. }

这将返回:

  1. {
  2. "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  3. "title": "One or more validation errors occurred.",
  4. "status": 400,
  5. "traceId": "00-40ce97917410bdcff73bb4d8737ed944-2c7f4bf20348d6b7-00",
  6. "errors": {
  7. "name": [
  8. "The name field is required."
  9. ],
  10. "address": [
  11. "The address field is required."
  12. ],
  13. "message": [
  14. "The message field is required."
  15. ]
  16. }
  17. }
英文:

my c# api takes two parameters, one complex object and one string:

  1. [HttpPost, Route("paramtester")]
  2. public string paramtester(people user, string message) {
  3. return user.name + message;}

how do I pass by a json object in the body? I have tried passing in a serial json object which doesn't work at all:

  1. {
  2. "user": {
  3. "name": "John Doe",
  4. "age": 30,
  5. "country": "USA"
  6. },
  7. "message": "Hello, World!"
  8. }

this will return:

  1. {
  2. "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  3. "title": "One or more validation errors occurred.",
  4. "status": 400,
  5. "traceId": "00-40ce97917410bdcff73bb4d8737ed944-2c7f4bf20348d6b7-00",
  6. "errors": {
  7. "name": [
  8. "The name field is required."
  9. ],
  10. "address": [
  11. "The address field is required."
  12. ],
  13. "message": [
  14. "The message field is required."
  15. ]
  16. }
  17. }

答案1

得分: 1

有两种正确的方法:

  1. 创建一个包含复杂对象 user 和简单字符串 message 的请求对象

    1. public class ParamTesterRequest
    2. {
    3. public People User {get; set;}
    4. public string Message {get; set;}
    5. }

    因此,您的Web API 变成了

    1. [HttpPost("paramtester")]
    2. public string ParamTester(ParamTesterRequest request)
    3. {
    4. return request.User.Name + request.Message;
    5. }
  2. 另一种方法是如Selvin所说,将复杂参数 user 从请求体中获取,将另一个作为查询参数。因此,您的Web API 变成了

    1. [HttpPost("paramtester")]
    2. public string ParamTester([FromQuery] string message, [FromBody] People user)
    3. {
    4. return user.Name + message;
    5. }

注意:第一种答案是最简单和最清晰的。

英文:

There is 2 correct approaches:

  1. create a request object that contains a complex object user and a silple string message

    1. public class ParamTesterRequest
    2. {
    3. public People User {get; set;}
    4. public string Message {get; set;}
    5. }

    So your web API become

    1. [HttpPost("paramtester")]
    2. public string ParamTester(ParamTesterRequest request)
    3. {
    4. return request.User.Name + request.Message;
    5. }
  2. the other one is as said by Selvin, use the complex parameter user from body and the other one as query parameter. So your web API become

    1. [HttpPost("paramtester")]
    2. public string ParamTester([FromQuery] string message, [FromBody] People user)
    3. {
    4. return user.Name + message;
    5. }

NOTE: the first answer is that it is the simplest and cleanest

答案2

得分: 0

你应该创建一个包括以下内容的DTO(数据传输对象):

  1. public sealed class MyDto
  2. {
  3. [JsonPropertyName("user")]
  4. public User user { get; set; }
  5. [JsonPropertyName("message")]
  6. public string message { get; set; }
  7. }
  8. public sealed class User
  9. {
  10. [JsonPropertyName("name")]
  11. public string name { get; set; }
  12. [JsonPropertyName("age")]
  13. public int age { get; set; }
  14. [JsonPropertyName("country")]
  15. public string country { get; set; }
  16. }

然后在端点上添加 [FromBody]

  1. [HttpPost, Route("paramtester")]
  2. public string paramtester([FromBody] MyDto myDto) {
  3. return myDto.Name + myDto.Message;
  4. }
英文:

You should create a DTO (Data Transfer Object) that includes both:

  1. public sealed class MyDto
  2. {
  3. [JsonPropertyName("user")]
  4. public User user { get; set; }
  5. [JsonPropertyName("message")]
  6. public string message { get; set; }
  7. }
  8. public sealed class User
  9. {
  10. [JsonPropertyName("name")]
  11. public string name { get; set; }
  12. [JsonPropertyName("age")]
  13. public int age { get; set; }
  14. [JsonPropertyName("country")]
  15. public string country { get; set; }
  16. }

Then add [FromBody] to the endpoint:

  1. [HttpPost, Route("paramtester")]
  2. public string paramtester([FromBody] MyDto myDto) {
  3. return myDto.Name + myDto.Message;}

huangapple
  • 本文由 发表于 2023年7月20日 22:21:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/76730855.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定