如何解决让 Web Api 解压并验证通过 multipart/form-data 发布的 JSON
我将 multipart/form-data
发送到我的一种操作方法,因为除了 JSON 之外,我还需要上传一个文件。所以在服务器端它看起来像这样:
public class ItemPostRequest
{
public List<Item> ItemsFromJson { get; set; }
public IFormFile File { get; set; }
}
public class Item
{
[Required]
public string Description { get; set; }
public string Amount { get; set; }
}
[HttpPost("test")]
public async Task<ActionResult<string>> PostItem([FromForm] ItemPostRequest itemPostRequest)
{
return Content("done","application/json",System.Text.Encoding.UTF8);
}
这是我的要求:
POST /api/items/test HTTP/1.1
User-Agent: PostmanRuntime/7.26.8
Accept: */*
Postman-Token: 55378de0-71a2-4762-ae78-b6683917dbf4
Host: localhost:44376
Accept-Encoding: gzip,deflate,br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------087805821886130931238212
Content-Length: 899
----------------------------087805821886130931238212
// =============== THE RELEVANT PART STARTS HERE ====================
Content-Disposition: form-data; name="ItemsFromJson" // <======= important part
// <======= is
[{"Description":"my first item","Amount":"123"}] // <======= here
----------------------------087805821886130931238212
Content-Disposition: form-data; name="File"; filename="localhost-1610916507269.log"
<localhost-1610916507269.log>
----------------------------087805821886130931238212--
因此,有效的 JSON 作为 ItemsFromJson
发送,但模型绑定不起作用。请注意以下屏幕截图中的 ItemsFromJson.Count
为 0,但项目是作为 [{"Description":"my first item","Amount":"123"}]
发送的。
如何在发送 multipart/form-data
请求时获得 JSON 反序列化,尤其是模型验证?我知道我可以在我的 ItemPostRequest
类中创建一个字符串属性并手动反序列化 JSON。但这仍然会缺少 Item
类中 Description
属性的模型验证!?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。