Как передать объект JSON в качестве параметра из Postman в ASP.NET WEB API - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу передать объект json в качестве параметра строки запроса (не из тела) в URL ASP.NET Core Web API от почтальона.Пожалуйста, дайте мне знать, как пройти?под образцом структуры объекта JSOB:

здесь, 'names's is string string *

"students":[
      {
         "id":"1",
         "names":["john", "james"]
      },
      {
         "id":"2",
         "names":["peter", "harry"]
     }
]

Ответы [ 4 ]

0 голосов
/ 06 марта 2019

Только в дополнение к Xueli Chen Ответ Я проверил это в .net core2.2

Модель студента

 public class Student
{
    public int Id { get; set; }
    public string[] Name { get; set; }
}


В Postman установите «Content-Type» на «application / json» в заголовках, а также установите [Produces("Application/json")] на стороне контроллера
В контроллере, если вы не используете [FromQuery] в параметре действия это также будет работать, и я думаю, что это просто Extra Type Casting, и я также буду использовать ресурсы для преобразования.Если мы не будем использовать его, это также сработает, и я изменю параметр, почему вы получаете список студентов по параметру, и без него будет слово.

[Route("api/[controller]")]
[ApiController]
public class StudentController : ControllerBase
{
    [Produces("application/json")]
    [HttpPost]
    public void PostStudent(Student students)
    {
          // you can get data here from students objects
    }
}
0 голосов
/ 19 декабря 2018

Я предполагаю, что вы используете это в GET (иначе это бессмысленно).Я также предполагаю, что вы хотите, чтобы параметр students URL-адреса был установлен в этот массив.

Вы должны URL-адресом кодировать всю строку.Вы можете использовать онлайн-кодировщик, например https://www.urlencoder.org.Для этого нужно:

[{"id":"1","names":["john","james"]},{"id":"2","names":["peter","harry"]}]

И превратить это в следующее:

%5B%7B%22id%22%3A%221%22%2C%22names%22%3A%5B%22john%22%2C%22james%22%5D%7D%2C%7B%22id%22%3A%222%22%2C%22names%22%3A%5B%22peter%22%2C%22harry%22%5D%7D%5D

Так вот, что вы вставили бы в свой URL:

http://example.com?students=%5B%7B%22id%22%3A%221%22%2C%22names%22%3A%5B%22john%22%2C%22james%22%5D%7D%2C%7B%22id%22%3A%222%22%2C%22names%22%3A%5B%22peter%22%2C%22harry%22%5D%7D%5D

НоЯ надеюсь, что это показывает, почему никто не делает этого :) Это грязно, и это может быть очень долго и очень быстро.

Ответ @RomanMarusyk немного более цивилизован, но подпись вашего контроллера должна соответствовать:вы бы приняли List<Student> (или как называется ваш класс ученика).

В идеале, объекты JSON, подобные этому, должны быть в теле запроса, и вы бы использовали метод HTTP, который принимает тело (как POST или PUT).

0 голосов
/ 19 декабря 2018

Это демонстрация, которую я сделал, вы можете сослаться на

В Почтальоне не забудьте установить " Content-Type " на " application / json " в Заголовки , в противном случае вы можете получить ошибку - 415 Неподдерживаемый MediaType.

https://localhost:44388/api/student/?students[0].id=1&students[0].name[0]=john&students[0].name[1]=james&students[1].id=2&students[1].name[0]=peter&students[1].name[1]=harry

Модель ученика

 public class Student
{
    public int Id { get; set; }
    public string[] Name { get; set; }
}

В Controller не забудьте добавить [FromQuery] в параметре действия.

[Route("api/[controller]")]
[ApiController]
public class StudentController : ControllerBase
{
    [HttpPost]
    public void PostStudent([FromQuery]List<Student> students)
    {
    }
}

Скриншот параметра учеников

enter image description here

Как ГабриэльЛюси сказала, что объект Json лучше всего передавать в теле запроса.

0 голосов
/ 19 декабря 2018

Попробуйте это:

?students[0][id]=1&students[0][names][0]=john&students[0][names][1]=james&students[1][id]=2&students[1][names][0]=peter&students[1][names][1]=harry
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...