Postman Post 尽管 API 在其他地方都在工作,但还是没有工作

Postman Post not working despite the API working everywhere else

我有一个 ASP.NET Core Web API 项目,带有这个 post 端点:

   [HttpPost("post")]
        public async Task<ActionResult<Player>> PostPlayer(Player player)
        {
            _context.Players.Add(player);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetPlayer", new { id = player.Id }, player);
        }

我可以使用此 JSON 负载在 Swagger 中向该端点发出 post 请求:

{
  "handle": "Cole",
  "role": "Fixer",
  "avatar": "null"
}

在这个地址:https://localhost:44326/api/Players/post

并且它成功地创建了一个新的播放器。

然而,在 Postman 中使用相同的地址和相同的 JSON 有效载荷作为主体,我得到这个:

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.13",
    "title": "Unsupported Media Type",
    "status": 415,
    "traceId": "00-36aa0c0b65a981479a1bb99d32400eff-77eb26e1d840de4d-00"
}

这到底是什么意思?为什么这个 post 方法在 Postman 中不起作用?我所有的 Get 端点在 Postman 中都可以正常工作,只是这个不行。

如果您的请求 body 是 JSON,您需要确保您 select 编辑了正确的 header 并且 [=] 中的请求类型正确57=] Postman 选项卡。

  • Content-Typeheader设置为application/json(没有就加上)
  • 转到 Postman 的 Body 选项卡,select raw 单选按钮,然后 select JSON 来自单选按钮旁边的下拉列表。

如果上述步骤不起作用,那么最好的方法是将工作请求(来自 Swagger)与 Postman 请求进行比较。以下是如何做到这一点:

  • 在GoogleChrome浏览器中打开swagger页面,然后打开Developer Tools(在Swagger页面Chrome中右击,然后点击Inspect).它将打开开发人员工具。
  • 转到开发人员工具的 网络 选项卡,select Fetch/XHR 过滤器.
  • 然后单击 Swagger 的 立即尝试 按钮向您的 API 提出请求。
  • 您将在 网络 选项卡的详细信息中看到 API 调用;然后您可以检查您的 Web 应用程序向您的 API 发送了什么 header。检查它为 Content-Type header.
  • 传递的值

一旦您在 Network 选项卡中跟踪到一个工作请求,就应该很容易弄清楚您的 Postman 请求与 Swagger 请求有何不同。