Запрос POSTMAN POST возвращает неподдерживаемый тип носителя - PullRequest
0 голосов
/ 03 мая 2018

Я следую инструкциям API Адама Фримена "Pro ASP.NET Core MVC 2". У меня есть следующий класс контроллера API:

    [Route("api/[controller]")]
    public class ReservationController : Controller
    {
        private IRepository repository;

    public ReservationController(IRepository repo) => repository = repo;

    [HttpGet]
    public IEnumerable<Reservation> Get() => repository.Reservations;

    [HttpGet("{id}")]
    public Reservation Get(int id) => repository[id];

    [HttpPost]
    public Reservation Post([FromBody] Reservation res) =>
        repository.AddReservation(new Reservation
        {
            ClientName = res.ClientName,
            Location = res.Location
        });

    [HttpPut]
    public Reservation Put([FromBody] Reservation res) => repository.UpdateReservation(res);

    [HttpPatch("{id}")]
    public StatusCodeResult Patch(int id, [FromBody]JsonPatchDocument<Reservation> patch)
    {
        Reservation res = Get(id);
        if(res != null)
        {
            patch.ApplyTo(res);
            return Ok();
        }
        return NotFound();
    }

    [HttpDelete("{id}")]
    public void Delete(int id) => repository.DeleteReservation(id);
}

В тексте используется PowerShell для тестирования API, но я бы хотел использовать Postman. В Почтальоне работает вызов GET. Однако я не могу получить метод POST для возврата значения. Ошибка гласит: «Код состояния: 415; Неподдерживаемый тип носителя '

В Почтальоне, Тело использует данные формы, с:

key: ClientName, value: Anne
key: Location, value: Meeting Room 4

Если я выберу раскрывающийся список «Тип» для «JSON», он будет читать «Неожиданный« S »»

В заголовках у меня есть:

`key: Content-Type, value: application/json`

Я также пробовал следующие необработанные данные в теле, а не данные формы:

{clientName="Anne"; location="Meeting Room 4"}

Контроллер API работает и возвращает правильные значения, когда я использую PowerShell. Для метода POST работает следующее:

Invoke-RestMethod http://localhost:7000/api/reservation -Method POST -Body (@{clientName="Anne"; location="Meeting Room 4"} | ConvertTo-Json) -ContentType "application/json"

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Для использования метода Patch было бы лучше, если бы сырой раздел тела почтальона был похож на

[   
    {
        "op": "replace", "path": "/firstName" , "value": "FirstName",
    }
]

и ввод данных в приложение / JSON

Screenshot for Patch method in Postman

0 голосов
/ 03 мая 2018

При использовании Postman с телом POST и JSON вам придется использовать запись данных raw и установить ее на application/json, и данные будут выглядеть так:

{"clientName":"Anne", "location":"Meeting Room 4"}

Обратите внимание, как указаны ключ и значение.

...