POSTMAN POST 请求返回不支持的媒体类型

POSTMAN POST Request Returns Unsupported Media Type

提问人:coolhand 提问时间:5/3/2018 更新时间:2/3/2022 访问量:18816

问:

我正在遵循 Adam Freeman 的“Pro ASP.NET Core MVC 2”中的 API 说明。我有以下 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。在 Postman 中,GET 调用有效。但是,我无法让 POST 方法返回值。错误显示“状态代码:415;不支持的媒体类型”

在 Postman 中,正文使用表单数据,包括:

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

如果我选择“JSON”的“类型”下拉列表,则显示“意外的'S'”

在标题中,我有:

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

我还尝试了正文中的以下原始数据,而不是表单数据:

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

当我使用 PowerShell 时,API 控制器确实可以工作并返回正确的值。对于 POST 方法,以下工作原理:

Invoke-RestMethod http://localhost:7000/api/reservation -Method POST -Body (@{clientName="Anne"; location="Meeting Room 4"} | ConvertTo-Json) -ContentType "application/json"
C# API ASP.NET 核心 邮递员

评论


答:

12赞 T.Aoukar 5/3/2018 #1

将 Postman 与 POST 和 JSON 正文一起使用时,您必须使用数据输入并将其设置为,数据将如下所示:rawapplication/json

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

请注意键和值的引用方式。

评论

1赞 coolhand 5/3/2018
也许我做错了什么,但我仍然有同样的错误。在 Postmans 中,我使用了原始和引文,如您所示。在“标头”中,我使用键作为值。BodyContent-TypeJSON(application/json)
0赞 T.Aoukar 5/3/2018
@KirkLarkin 感谢您注意到这一点,没有注意到 =。相应地修复了答案。
0赞 coolhand 5/3/2018
@KirkLarkin,很抱歉您在我发布之前编辑了您的评论。我已经尝试了您的建议,但仍然遇到相同的错误
0赞 T.Aoukar 5/3/2018
@coolhand,您不必手动添加标头值,请将其删除,或将值设置为 JSON(application/json) 是输入原始数据时 Postman 中的框application/json
1赞 Mauricio Gracia Gutierrez 5/3/2018
也许这个评论可以包含在下一个发现这个问题的人的答案中