【问题标题】:Postman POST request Model binding not working with an IFormfile property邮递员 POST 请求模型绑定不适用于 IFormfile 属性
【发布时间】:2020-07-19 07:25:32
【问题描述】:

我有一个这样的模型。

    public class ClientDto
    {
       public string FirstName { get; set; }
       public string LastName { get; set; }
       public string PhoneNumber { get; set; }
       public string Address { get; set; }
       public IFormFile ProfilePicture { get; set; }
     }

还有这样的 API 控制器:

    [HttpPost]
    public async Task<OperationResult> Post([FromForm] ClientDto c)
    {
        ImageHandler handler = new ImageHandler(env);
        Client client = new Client()
        {
            Address = c.Address,
            FirstName = c.FirstName,
            LastName = c.LastName,
            PhoneNumber = c.PhoneNumber,
            PhotoPath = await handler.UploadFile(c.ProfilePicture)
        };
        return await clientRepository.AddClient(client);
    }

现在,如果我在包含一个以ProfilePicture 为键的文件后向邮递员发出Post 请求(在邮递员>>正文>>表单数据部分下),模型绑定将按预期工作. api 控制器接收PofilePicture 和其余属性null。但是,如果我为类似这样的其他属性包含 json 字符串(在 Postman >> Body >> raw 部分)

    {
     "c":{
          "FirstName": "XYZ",
          "LastName":"ABX"
         }
    }

     {
          "FirstName": "XYZ",
          "LastName":"ABX"
     }

模型绑定不再起作用。如果我想提供所有属性,如何使用 postman 访问 api 控制器?

【问题讨论】:

    标签: c# asp.net-core .net-core postman model-binding


    【解决方案1】:

    您正在混合发送到控制器的数据 - 它很混乱。

    在您对图像的请求中,内容类型为multipart/form-data,因为正文包含一个文件和可能的其他表单数据字段。在带有 JSON 的请求中,内容类型为 application/json,并且您没有发送任何文件数据。

    您必须决定是只发送 JSON 还是发送表单数据。

    在这种情况下,由于您要发送文件,因此您需要使用 multipart/form-data 并只需在 Postman (see how to set Postman form-data parameters here) 的表单字段中设置缺少的字段。

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2022-08-15
      • 2021-04-13
      • 2018-03-27
      • 2020-11-08
      • 2019-08-25
      • 2021-10-06
      • 2017-12-30
      • 2020-11-23
      相关资源
      最近更新 更多