【发布时间】:2021-08-15 21:07:18
【问题描述】:
我有一个从客户端接收数据的现有 API 端点。我想添加在该端点上接收文件以及数据的功能。这是我的模型:
public class TestModel
{
public IList<IFormFile> File { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Hobbies { get; set; }
}
这是我的终点:
[HttpPost]
[Route("upload")]
public async Task<ActionResult> UploadTest([FromBody] TestModel test)
{
return Ok();
}
我目前正在使用 Postman 测试我的 API。我知道在 Postman 中可以选择以 form-data 作为正文发送文件,但在这种情况下,我的客户需要使用 form-data 而我使用 json 作为数据(使用 FromBody)。
我找不到如何做到这一点的方法 - 有可能吗?如果是这样,我如何使用 Postman 发送文件视图raw json?
【问题讨论】:
-
您不能同时结合 json 响应和文件响应(即 1 个请求的 2 个响应)。您需要有 2 个端点,一个用于 json,一个用于文件。
-
可能是错误的,但是,如果您打算一次性完成,我认为最好的方法是对二进制文件客户端进行编码(例如,使用 base64),然后在何时取消编码你反序列化。见:stackoverflow.com/questions/1443158/…
-
@Neil 谢谢。在这种情况下,确保完整交易的最佳做法是什么?这意味着客户端确定服务器已上传数据和文件。假设数据已上传,现在我调用上传文件,但文件上传失败 - 数据应该被删除,因为没有文件它是不相关的。仅通过表单数据?
-
没有自动跟踪的方法。你必须想出一个适合你的方案。 @Jonathan 的想法可能更好,但这取决于您的文件有多大。我在一个需要最多 60GB 上传的系统上工作,但他的建议并不实用。
-
你现在如何保存数据,你使用ORM吗?数据库交互是直接发生在端点中还是在其他地方有这种逻辑?
标签: c# asp.net asp.net-core asp.net-web-api