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-Type
header设置为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 请求有何不同。
我有一个 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-Type
header设置为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 请求有何不同。