Postman POST 请求模型绑定不适用于 IFormfile 属性
Postman POST request Model binding not working with an IFormfile property
我有这样的模型。
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
请求(在 Postman >> Body >> form-data 部分 ), 模型绑定按预期工作。 api 控制器接收 PofilePicture
和其余属性 null
。但是如果我像这样为其他属性包含 json 字符串( 在 Postman >> Body >> raw 部分下)
{
"c":{
"FirstName": "XYZ",
"LastName":"ABX"
}
}
或
{
"FirstName": "XYZ",
"LastName":"ABX"
}
模型绑定不再有效。如果我想提供所有属性,如何使用邮递员点击 api 控制器?
您正在混合发送到控制器的数据 - 它很混乱。
在您的图片请求中,内容类型为 multipart/form-data
,因为正文包含文件和可能的其他表单数据字段。在带有 JSON 的请求中,内容类型是 application/json
并且您没有发送任何文件数据。
您必须决定是仅发送 JSON 还是表单数据。
在这种情况下,由于您要发送文件,因此您需要使用 multipart/form-data
并仅在 Postman (see how to set Postman form-data parameters here) 的表单字段中设置缺少的字段。
我有这样的模型。
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
请求(在 Postman >> Body >> form-data 部分 ), 模型绑定按预期工作。 api 控制器接收 PofilePicture
和其余属性 null
。但是如果我像这样为其他属性包含 json 字符串( 在 Postman >> Body >> raw 部分下)
{
"c":{
"FirstName": "XYZ",
"LastName":"ABX"
}
}
或
{
"FirstName": "XYZ",
"LastName":"ABX"
}
模型绑定不再有效。如果我想提供所有属性,如何使用邮递员点击 api 控制器?
您正在混合发送到控制器的数据 - 它很混乱。
在您的图片请求中,内容类型为 multipart/form-data
,因为正文包含文件和可能的其他表单数据字段。在带有 JSON 的请求中,内容类型是 application/json
并且您没有发送任何文件数据。
您必须决定是仅发送 JSON 还是表单数据。
在这种情况下,由于您要发送文件,因此您需要使用 multipart/form-data
并仅在 Postman (see how to set Postman form-data parameters here) 的表单字段中设置缺少的字段。