Asp.Net核心API文件上传

Asp.Net Core API File Upload

我正在尝试为应用程序 (ASP.NET Core 3.1/C#) 创建日志文件上传 API。基本上,文件应该能够按需上传到 URL,并将其保存到 Azure BLOB 存储以供以后查看。

从 Postman 进行测试时,我得到了不同的结果。如果我离开 Content-Type header as-is,我会收到“415 Unsupported Media Type”错误:

如果我un-checkContent-Typeheader,我成功命中了API,但是日志文件总是NULL。在阅读了很多有类似问题的帖子后,我尝试了使用和不使用 [FromForm]、[Consumes] 以及许多其他此类小更改,但无法弄清楚。

我假设有一些简单的事情我做错了或遗漏了,但我没有想法!

下面是我的 API 端点

的代码
        [HttpPost]
        [Consumes("multipart/form-data")]
        [Route("/api/beam/v1/{orgCode}/device/{deviceCode}/log")]
        [Authorize]
        public async Task<IActionResult> PostLogAsync(string orgCode, string deviceCode, [FromForm(Name = "log")] IFormFile log)
        {
            string lvBlobFileName;
            string lvContainerName;

            string strContent = Request.ContentType;

            lvContainerName = _configuration["StorageContainerLogs"];

            BlobContainerClient container = GetCloudBlobContainer(lvContainerName);

            lvBlobFileName = $"{orgCode}/{deviceCode}/{deviceCode}_{DateTime.Now.ToString("yyyyMMddhhmmss")}";
            BlobClient blob = container.GetBlobClient(lvBlobFileName);

            if (log == null)
                return Ok("No files to upload");

            using (Stream reader = log.OpenReadStream())
            {
                await blob.UploadAsync(reader);
            }

            return Ok();
        }

感谢任何帮助!

据我所知,如果你想post将自动模型绑定到 iformfile 的文件,你应该使用 form-data 而不是二进制文件。

更多细节,可以参考下面postman设置:

结果: