Я следую инструкциям 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"