尝试使用Content-Type为application/x-www-form-urlencoded访问API。

4
我正在使用dotnet core框架构建API restful服务器。我添加了控制器并尝试使用postman到达一个端点。
我有两个问题:
  • Problem 1

    // POST api/user
    [HttpPost]
    [Authorize()]
     public async Task<IActionResult> Post([FromBody]UserModel user)
    {
    }
    

除非我使用 postman 并以原始的 JSON 格式发送请求,指定格式为 application/json,否则如果我使用 application/x-www-form-urlencoded 格式,则无法到达此端点,总是会收到 415 不支持的媒体类型错误。

  • Problem 2

    // POST api/user/avatar
    [HttpPost]
    [Authorize()]
    [Route("avatar")]
    public async Task<IActionResult> Post([FromBody]UserModel user, [FromBody]IFormFile file)
    {
    }
    
我不知道如何使用Postman访问这样的终端节点。
2个回答

7

在问题1中,您只需要使用FromForm属性而不是FromBody。

至于第二个问题,我认为编写简单的单元测试或使用Swashbuckle会更容易,它有针对此类请求的出色界面。


2
非常感谢,但有没有一种方法可以同时接受 application/jsonapplication/x-www-form-urlencoded 两种格式? - mohamed elsabagh
为什么你想要这样做? - davidfowl

3

您可以像这样使用Consumes属性:

// POST api/user
[HttpPost, Consumes("application/x-www-form-urlencoded")]
[Authorize()]
public async Task<IActionResult> Post([FromBody]UserModel user)
{
}

1
这对我不起作用。仍然收到415不支持的媒体类型错误。 - vmachacek
1
我也是,不幸的是这并没有帮助到我。 - DanielV
由于某种原因,这对我起作用了。在Postman中我一直收到415错误,所以决定试一试这个方法。点赞。 - Edwin Chua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接